完成迭代效劳器端和客户端

网友投稿 236 2022-10-30


完成迭代效劳器端和客户端

后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像Web效劳器那样不断承受客户端的恳求呢?能,运用 while 轮回即可。修正后面的反响程序,使效劳器端可以不时呼应客户端的恳求。效劳器端 server.cpp:

#include  #include  #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll #define BUF_SIZE 100 int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData); //创立套接字 SOCKET servSock = socket(AF_INET, SOCK_STREAM, 0); //绑定套接字 sockaddr_in sockAddr; memset(&sockAddr, 0, sizeof(sockAddr)); //每一个字节都用0填充 sockAddr.sin_family = PF_INET; //运用IPv4地址 sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //详细的IP地址 sockAddr.sin_port = htons(1234); //端口 bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR)); //进入监听形态 listen(servSock, 20); //接纳客户端恳求 SOCKADDR clntAddr; int nSize = sizeof(SOCKADDR); char buffer[BUF_SIZE] = {0}; //缓冲区 while(1){ SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize); int strLen = recv(clntSock, buffer, BUF_SIZE, 0); //接纳客户端发来的数据 send(clntSock, buffer, strLen, 0); //将数据原样前往 closesocket(clntSock); //封闭套接字 memset(buffer, 0, BUF_SIZE); //重置缓冲区 } //封闭套接字 closesocket(servSock); //终止 DLL 的运用 WSACleanup(); return 0; }

客户端 client.cpp:

#include  #include  #include  #pragma comment(lib, "ws2_32.lib") //加载 ws2_32.dll #define BUF_SIZE 100 int main(){ //初始化DLL WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); //向效劳器提议恳求 sockaddr_in sockAddr; memset(&sockAddr, 0, sizeof(sockAddr)); //每一个字节都用0填充 sockAddr.sin_family = PF_INET; sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); sockAddr.sin_port = htons(1234); char bufSend[BUF_SIZE] = {0}; char bufRecv[BUF_SIZE] = {0}; while(1){ //创立套接字 SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR)); //获取用户输出的字符串并发送给效劳器 printf("Input a string: "); gets(bufSend); send(sock, bufSend, strlen(bufSend), 0); //接纳效劳器传回的数据 recv(sock, bufRecv, BUF_SIZE, 0); //输入接纳到的数据 printf("Message form server: %s\n", bufRecv); memset(bufSend, 0, BUF_SIZE); //重置缓冲区 memset(bufRecv, 0, BUF_SIZE); //重置缓冲区 closesocket(sock); //封闭套接字 } WSACleanup(); //终止运用 DLL return 0; }

先运转效劳器端,再运转客户端,后果如下:Input a string: c languageMessage form server: c languageInput a string: C言语中文网Message form server: C言语中文网Input a string: 进修C/C++编程的好网站Message form server: 进修C/C++编程的好网站while(1) 让代码进入死轮回,除非用户封闭程序,不然效劳器端会不断监听客户端的恳求。客户端也是一样,会不时向效劳器提议衔接。需求留意的是:server.cpp 中挪用 closesocket() 不只会封闭效劳器端的 socket,还会告诉客户端衔接已断开,客户端也会清算 socket 相干资本,所以 client.cpp 中需求将 socket() 放在 while 轮回外部,由于每次恳求终了都邑清算 socket,下次提议恳求时需求从新创立。后续我们会停止具体解说。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TCP的粘包成绩以及数据的无界限性
下一篇:Java连接 JDBC基础知识(操作数据库:增删改查)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~