Windows C语言套接字多线程实现TCP聊天

								Windows C语言套接字多线程实现TCP聊天

话不多说,直接上干货,代码1分成两个部分
第一个是客户端

#include <winsock2.h>
#include <stdio.h>
#define BUFF 1024
int Port=6666,f;
char sendbuff[1024];
char recvbuff[1024];
int thread_send(SOCKET c)
{
while(1)
{

    scanf("%s",sendbuff);
    if(strcmp(sendbuff, "quit") == 0)   //quit
    break;
    //printf("\n用户1:");
    f=send(c,sendbuff,BUFF,0);
    if(-1==f)
    {
        printf("发送失败\n");
        closesocket(c);
        WSACleanup();
        return -1;
    }
}

}
void main()
{

struct sockaddr_in serveadd;
SOCKET c,ret;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
c=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
serveadd.sin_port=htons(Port);
serveadd.sin_family=AF_INET;
serveadd.sin_addr.s_addr = inet_addr("169.254.5.189");//更具自己的IP弟子来改
if(connect(c, (SOCKADDR*)&serveadd, sizeof(serveadd))==-1)
{
    printf("连接失败");
    return -1;
}
_beginthreadex(NULL,0,&thread_send,c,NULL,0);
while(1)
    {
        ret = recv(c,recvbuff, BUFF, 0);
        if(ret>0)
        printf("用户2: %s\n", recvbuff);
        else
        {
            printf("接受失败\n");
            closesocket(c);
            WSACleanup();
            return -1;

        }
    }
shutdown(c, SD_BOTH);
closesocket(c);
WSACleanup();

}

第二个是服务器代码
#include <winsock2.h>
#include <stdio.h>
#define BUFF 1024
int Port=6666,ret;
char sendbuff[BUFF];
char recvbuff[BUFF];
void thread_recv(SOCKET newc)
{
while(1)
{
ret=recv(newc,recvbuff,BUFF, 0);
if(ret > 0)
printf(“用户1: %s\n”,recvbuff);
else if(ret < 0)
{
printf(“接收错误%d\n”,SOCKET_ERROR);
closesocket(newc);
WSACleanup();
return -1;
}

}

}
void main()
{

struct sockaddr_in serveadd;
SOCKET c,newc;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
c=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
serveadd.sin_port=htons(Port);
serveadd.sin_family=AF_INET;
serveadd.sin_addr.s_addr = inet_addr("0.0.0.0");
bind(c,(struct sockaddr*)(&serveadd),sizeof(serveadd));
listen(c,5);
printf("等待连接...");
newc=accept(c,(struct sockaddr*)(&serveadd),&serveadd);
if(newc==-1)
{
    return -1;
}
printf("连接成功\n");
_beginthreadex(NULL,0,&thread_recv,newc,NULL,0);

while(1)
{

    scanf("%s",sendbuff);
    if(strcmp(sendbuff,"quit") == 0)   //退出
        break;
    //printf("\n用户2:");
    if(send(newc,sendbuff,BUFF,0) == SOCKET_ERROR)
    {
        printf("消息发送失败!\n");
        break;
    }
}
shutdown(newc, SD_BOTH);
closesocket(c);
closesocket(newc);
WSACleanup();

}
注意事项

  1. IP地址查询,打开命令窗口(就是小黑窗口)
  2. 再输入 ipconfig 获取本机配置
  3. 把ipv4地址复制就行了
  4. 第二点就是要先运行服务器代码,再运行客户端代码,
  5. 然后你们还有问题就加我qq2434954452,乐意分享;

版权声明:本文为qq_42454252原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。