搜索

socket通讯怎么互发信息

发布网友 发布时间:2022-04-20 08:05

我来回答

1个回答

热心网友 时间:2022-06-02 12:17

展开1全部两部分代码,一个server,一个client。
server 端代码:

#include "stdio.h" #include "Winsock2.h" #include "iostream" #include "string" //#pragma comment(lib, "ws2_32.lib") //define host IP and usable port. #define HOST_IP 127.0.0.1 #define HOST_PORT 8080 #define OK_STR "OK" void main(){ //the version bit of Winsock int version_a = 1;//low bit int version_b = 1;//high bit //makeword WORD versionRequest = MAKEWORD(version_a,version_b); WSAData wsaData; int err; err = WSAStartup(versionRequest, &wsaData); if(err != 0 ){ printf("ERROR!"); return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { printf("WRONG WINSOCK VERSION!"); WSACleanup(); return; } SOCKET socServer = socket(AF_INET, SOCK_DGRAM,0); SOCKADDR_IN addr_Srv; //It's nest three structs as S_un_b, S_un_w and S-un.(union) addr_Srv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //set protocol family addr_Srv.sin_family = AF_INET; //set host port addr_Srv.sin_port = htons(HOST_PORT); //bind socket to the host bind(socServer,( SOCKADDR*) &addr_Srv, sizeof(SOCKADDR)); //address of a client SOCKADDR_IN addr_Clt; char recvBuf[100]; int fromlen = sizeof(SOCKADDR); while(true){ recvfrom(socServer, recvBuf, 100, 0, (SOCKADDR*) &addr_Clt, &fromlen); std::cout<<recvBuf<<std::endl; sendto(socServer, OK_STR, strlen(OK_STR)+1, 0, (SOCKADDR*)&addr_Clt,sizeof(SOCKADDR)); } closesocket(socServer); WSACleanup(); }

client端代码:

#include "Winsock2.h" #include "iostream" #include "stdio.h" #pragma comment(lib, "ws2_32.lib") #define HOST_IP "127.0.0.1" #define HOST_PORT 8080 void main(){ //the version bit of Winsock int version_a = 1;//low bit int version_b = 1;//high bit //makeword WORD versionRequest = MAKEWORD(version_a,version_b); WSAData wsaData; int error; error = WSAStartup(versionRequest, &wsaData); if(error != 0 ){ printf("ERROR!"); return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { printf("WRONG WINSOCK VERSION!"); WSACleanup(); return; } //request info obtained by user's input char requestStr[100]; //build a sockeet SOCKET socClient = socket(AF_INET, SOCK_DGRAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; //set the protocol family addrSrv.sin_port=htons(HOST_PORT); //set the port number // array to store the data that server feedback. char cRecvBuf[100]; while(true){ std::cin>>requestStr; //sendto function is used to send programe data to the server sendto(socClient, requestStr, strlen(requestStr)+1, 0, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR)); recv(socClient, cRecvBuf, strlen(cRecvBuf)+1, 0); std::cout<< cRecvBuf << std::endl; } //close the socket and cleanup the wsadata closesocket(socClient); WSACleanup(); // return 0; }
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top