Socket网络聊天程序
Posted tangdingkang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("已经退出聊天! "); continue; } printf("%s ", recvBuf); } } return 0; } void main() { printf("服务器开启! "); 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); } }
以上是关于Socket网络聊天程序的主要内容,如果未能解决你的问题,请参考以下文章
网络文件传输 使用Socket传输文件 服务器代码 程序初始化
在已经在wampserver上运行的网站上运行socket.io聊天应用程序
聊天应用程序 - Socket.IO/Angular/MongoDB - 聊天和聊天历史不显示