资源描述:
《window基于TCP、UDP通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC++ 使用socket基于TCP、UDP通信 (2012-12-1813:05:36)转载▼标签: socket bind listen send recv分类: TCP/IP首先包含头文件:#include链接winsock库#pragmacomment(lib,"ws2_32.lib")#defineMAX_MSG_LEN1500//最大的消息长度(MTU)TCP方式通信(服务端):1、加载SOCKET库WSADATAwsa;if(WSAStartup(MAKEWORD(1,1)
2、,&wsa)!=0){returnFALSE; //加载失败}2、创建SOCKETSOCKETm_socket=socket(AF_INET,SOCK_STREAM,0);//TCP流式3、将SOCKET绑定到IP和端口//配置监听地址、绑定监听端口 SOCKADDR_INSersock;//用于服务器的监听SOCKETZeroMemory(&Sersock,sizeof(Sersock)); Sersock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//所有可用IPSe
3、rsock.sin_family=AF_INET; Sersock.sin_port=htons(usPort);//端口号 intnbind= bind(m_socket,(SOCKADDR*)&Sersock,sizeof(SOCKADDR)); if(SOCKET_ERROR==nbind) { closesocket(m_socket); returnFALSE; }4、创建线程,设置创建的SOCKET为监听模式等待连接请求listen(m_socket,5);5、使用accept函数接收到一个请求
4、后(在接收到请求后才会返回),将创建一个与客户端新的SOCKET。6、使用新的SOCKET与客户端send/recv通信。7、关闭本次连接SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);charszrecvbuf[MAX_MSG_LEN];charszsendBuf[50];ZeroMemory(szrecvbuf,sizeof(szrecvbuf));ZeroMemory(szsendBuf,sizeof(szsendBuf));SOCKETsockSer;whi
5、le(TRUE){//用accept函数接收客户方的连接sockSer=accept(m_socket,(SOCKADDR*)&addrClient,&len);if(INVALID_SOCKET==sockSer)continue;sprintf(szsendBuf,"Welcome%stoThis!",inet_ntoa(addrClient.sin_addr));//在客户方套接字clientSocket上使用send发送数据send(sockSer,szsendBuf,strlen(szsendBuf
6、)+1,0);//接收的数据recv(sockSer,szrecvbuf,50,0);psocket->m_strData.Format(_T("IP:%s,端口:%d说:%s"),inet_ntoa(addrClient.sin_addr),addrClient.sin_port,szrecvbuf);//::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)psocket->m_strData.GetBuffer(0));//(给窗口发消息,通知)//关闭本次连接closeso
7、cket(sockSer);//休息100SSleep(100);}8、关闭SOCKET和释放SOCKET库//关闭socketclosesocket(m_socket);WSACleanup();TCP方式通信(客户端):1、加载SOCKET库WSADATAwsa;if(WSAStartup(MAKEWORD(1,1),&wsa)!=0){returnFALSE; //加载失败}2、创建SOCKETSOCKETm_socket=socket(AF_INET,SOCK_STREAM,0);//TCP流式3、
8、向服务端发送连接请求SOCKADDR_INSocketSendIn;SocketSendIn.sin_family=AF_INET;SocketSendIn.sin_addr.S_un.S_addr=htonl(m_ulRemoteIP);SocketSendIn.sin_port=htons(m_usRemotePort);charszBuf[50];//先建立连接intnRet= connect