Socket网络聊天程序

IDE:CodeBlocks

(如果在CB下进行Sokcet编程,要添加一个文件)详情请看这个:https://www.cnblogs.com/Xbert/p/5466963.html

然后这个程序是要同时开启客户端和服务端两个,调试很麻烦,建议双开两个codeblocks,链接:https://blog.csdn.net/weixin_41505011/article/details/80575522

客户端代码:

这里开启了一个新线程来接受用户端传来的消息,主线程则可以输出消息

#include <stdio.h>
#include <stdlib.h>
#include <Winsock2.h>
char recvBuf[50];
SOCKET sockSrv;
SOCKET sockConn;
DWORD WINAPI Server_Receive_Thread(LPVOID lp)
{
    int i;
    SOCKET s = (SOCKET)lp;
        while(1){     //之前在这里犯错了,线程也是要循环的,不能用if
                if(recv(s, recvBuf, 50, 0)>0){
                    for(i=0;;i++){
                        if(recvBuf[i]==‘]‘)
                            break;
                    }
                    if(recvBuf[i+2]==‘q‘)
                    if(recvBuf[i+3]==‘u‘)
                    if(recvBuf[i+4]==‘i‘)
                    if(recvBuf[i+5]==‘t‘){
                        for(int j=0;j<=i;j++)
                            printf("%c",recvBuf[j]);
                        printf("已经退出聊天!\n");
                        continue;
                    }
                    printf("%s\n", recvBuf);
                }

        }
        return 0;
}
void main()
{
    printf("服务器开启!\n");
    WORD wVersionRequested;             //要求使用winSock的版本
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );   //初始化winSock
    if ( err != 0 )
    {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
    {
        WSACleanup( );      //版本不对,即退出
        return;
    }
    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  //创建一个套接字,
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //就是要用来通讯的 IP 地址信息。
    addrSrv.sin_family=AF_INET;                     //这是告诉 WinSock 使用的是 IP 地址族
    addrSrv.sin_port=htons(6000);                   //sin_port 就是要用来通讯的端口号
    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

    SOCKADDR_IN addrClient;
    int len=sizeof(SOCKADDR);
    while(1)
    {
        listen(sockSrv,5);
        //客户端有了连接请求,来用这个函数来接受请求
        SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
        //创建接受消息的线程
        HANDLE hThread = CreateThread(NULL, 0, Server_Receive_Thread, sockConn, 0, NULL);
        char sendBuf[50];
        sprintf(sendBuf,"您的ip地址是:%s ",inet_ntoa(addrClient.sin_addr));
        send(sockConn,sendBuf,strlen(sendBuf)+1,0);
        char message[50];
        while(1){
                scanf("%s",message);
                sprintf(sendBuf,"[Server]:%s ",message);
                send(sockConn,sendBuf,sizeof(sendBuf),0);
                if(strcmp(message,"quit")==0)
                    exit(0);
        }
        closesocket(sockConn);
    }
}

原文地址:https://www.cnblogs.com/tangdingkang/p/12073144.html

时间: 2024-08-02 10:04:06

Socket网络聊天程序的相关文章

一个hello/hi的简单的网络聊天程序和python Socket API与Linux Socket API之间的关系

1.Socket概述 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口的组合. 套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点.通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到

通过基于java实现的网络聊天程序分析java中网络API和Linux Socket API关系

1. 引言 socket网络编程,可以指定不同的通信协议,在这里,我们使用TCP协议实现基于java的C/S模式下“hello/hi”网络聊天程序 2. 目标 1). 通过该网络聊天程序,了解java Socket API接口的基本用法 2). java Socket API简要介绍 3). linux socket API 简单分析 4). tcp协议的连接和终止 5). 探究java socket API 和 linux socket api之间的关系 3. linux socket API

boost asio异步读写网络聊天程序客户端 实例详解

// // chat_client.cpp // ~~~~~~~~~~~~~~~ // // Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://ww

java实现hello/hi的简单的网络聊天程序与ServerSocket调用栈跟踪

java实现hello/hi的简单的网络聊天程序 网络聊天采用TCP协议通过java实现 import java.io.*; import java.net.Socket; public class Client { public static void main(String[] args) throws Exception{ Socket socket = new Socket("192.168.31.68", 6666); BufferedReader reader = new

ubuntu系统下使用python3实现简单的网络聊天程序

这是我的第二篇博客,很遗憾第一篇博客没有得到应有的认可. 可能是因为原理介绍和实操部分不够多,只是单纯分析了某一条指令在打开网页过程中,输出的变化. 在我的第二篇博客中把相关原理介绍的更加详细了,同时丰富了程序代码部分的介绍. 本文对通信相关知识点(如socket套接字.TCP/IP.HTTP通信协议).hello/hi网络聊天程序代码.python socke接口与Linux socket api之间的关系三个方面做了相关介绍 一.网络通信相关知识 首先必须明确一点,我们进行网络通信之前,必须

一个hello/hi的简单的网络聊天程序

我选择使用python来实现hello/hi的简单网络聊天程序,源代码包括两个部分,客户端代码和服务器端代码,源代码部分如下图所示: 服务器端代码 1 import socket 2 3 HOST = '127.0.0.1' 4 PORT = 8888 5 6 server = socket.socket() 7 server.bind((HOST, PORT)) 8 server.listen(1) 9 10 print(f'the server is listening at {HOST}:

在windows环境下用C++完成一个hello/hi网络聊天程序

经过网络程序设计课程的学习,我们了解了socket网络程序编程,接下来,就要学以致用,完成一个hello/hi的网络聊天程序. Socket介绍  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部. Socket起源于Unix,而Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/re

基于Java实现hello/hi简单网络聊天程序

目录 Socket简要阐述 Socket的概念 Socket原理 hello/hi的简单网络聊天程序实现 服务器端 客户端 程序执行结果 跟踪分析调用栈 & Linux API对比 创建ServerSocket 调用栈图示 源码分析 Socket绑定 调用栈图示 源码分析 Socket监听 调用栈图示 源码分析 Socket Accept 调用栈图示 源码分析 Java Socekt API与Linux Socket API 参考链接 Socket简要阐述 Socket的概念 Socket的英文

基于Python完成一个hello/hi的简单的网络聊天程序

一.Socket 套接字简介 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接字是IP地址与端口的组合. 传输层实现端到端的通信,因此,每一个传输层连接有两个端点.那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口.传输层连接的端点叫做套接字(socket).根据RFC793的定义:端口号拼接到IP