Socket之UDP通信例子

来源:互联网 发布:u盘数据怎么恢复 编辑:程序博客网 时间:2024/05/04 20:38

UDP通信方式:

1,客户端不需要进行连接,而是直接访问服务器通过sendto来发送数据,recvfrom接受数据

2,服务端,不需要监听、接受等待客户端请求,当收到客户端socket通过sendto来回应客户端请求。


Client端:

#include <winsock2.h>#include <iostream>#pragma comment(lib, "WS2_32.lib")const unsigned int PORT = 11024;const int kBufferSize= 1024;int main() {WSADATA wsData;if(WSAStartup(MAKEWORD(2, 2), &wsData) != 0) {std::cout << "start up failed\n" << std::endl;return 0;}// connect the socket;SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);SOCKADDR_IN addIn;addIn.sin_family = AF_INET;addIn.sin_port = htons(PORT);addIn.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");char cSendBuffer[kBufferSize] = "Client sends a Message to the Server, please confirm?";int bRecvLen = sizeof(addIn);int bSendRet = sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addIn, sizeof(addIn));while(bSendRet != SOCKET_ERROR) {char cRecvBuffer[kBufferSize] = "#";int bRecv = recvfrom(s, cRecvBuffer, kBufferSize, 0, (LPSOCKADDR)&addIn, &bRecvLen);if(bRecv != SOCKET_ERROR) {std::cout << "Client recvie the infromation from the server is: " << cRecvBuffer << std::endl;ZeroMemory(cSendBuffer, kBufferSize);std::cout << "please input the information the sends to the server: ";std::cin >> cSendBuffer;bSendRet = sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addIn, sizeof(addIn));} else{break;}}if(WSACleanup() != 0) {std::cout << "clean up failed\n";return -1;}closesocket(s);return 0;}



Server端:

#include <iostream>#include <winsock2.h>#pragma comment(lib, "WS2_32.lib")const unsigned int PORT = 11024;const int kBufferSize= 1024;int main() {WSADATA wsData;if(WSAStartup(MAKEWORD(2, 2), &wsData) != 0) {std::cout << "start failed" << std::endl;return -1;}//SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);SOCKADDR_IN addIn;addIn.sin_family = AF_INET;addIn.sin_port = htons(PORT);addIn.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");int bBindRet = bind(s, (LPSOCKADDR) &addIn, sizeof(addIn));if(bBindRet != 0) {std::cout << "bind failed" << std::endl;return -1;}char cRecvBuffer[kBufferSize];int ilen = sizeof(addIn);int iRecv = recvfrom(s, cRecvBuffer, kBufferSize, 0, (LPSOCKADDR)&addIn, &ilen);while(iRecv != SOCKET_ERROR) {std::cout << "recvie information: " << std::endl;char cSendBuffer[kBufferSize];std::cout << "Input the information that the client sends; " << std::endl;std::cin >> cSendBuffer;sendto(s, cSendBuffer, kBufferSize, 0, (LPSOCKADDR)&addIn, sizeof(addIn));}if(WSACleanup() != 0) {std::cout << "Clean up failed" << std::endl;return -1;}return 0;}



0 0
原创粉丝点击