c语言windows简单套接字,Windows C语言套接字多线程实现TCP聊天

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

话不多说,直接上干货,代码1分成两个部分

第一个是客户端

#include #include #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 #include #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();

}

注意事项

IP地址查询,打开命令窗口(就是小黑窗口)

再输入 ipconfig 获取本机配置

把ipv4地址复制就行了

第二点就是要先运行服务器代码,再运行客户端代码,

然后你们还有问题就加我qq2434954452,乐意分享;