完成迭代效劳器端和客户端
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像Web效劳器那样不断承受客户端的恳求呢?能,运用 while 轮回即可。修正后面的反响程
千家信息网最后更新 2026年10月31日完成迭代效劳器端和客户端
后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像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 language
Message form server: c language
Input 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,下次提议恳求时需求从新创立。后续我们会停止具体解说。
客户
客户端
套接字
数据
端的
缓冲区
缓冲
程序
需求
不断
中文网
地址
字节
用户
网站
言语
中文
清算
监听
编程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡
互联网科技有限公司图片
互联网 科技
万易互联网科技有限公司
安徽鑫晟辉互联网科技
九亚互联网科技
苏州大垚互联网科技
掌上梦互联网科技
互联网科技有限公司 翻译
居家互联网科技有限公司
卓越科技互联网 招聘
欧洲十大科技互联网公司
现代互联网科技股
互联网金融科技公司干啥的
互联网科技创新服务
福建科技产业互联网发展
科技互联网海报
上海创道互联网络科技有限公司
互联网硬科技公司
三亚科技创新互联网基地
咖啡网
互联网科技资迅
国外互联网科技网站
人人互联网科技是培训
天扬科技互联网广告
哈尔滨新华互联网科技
互联网科技寓意
互联网媒体平台算高科技产业
互联网科技和信息
本届互联网博览会上的黑科技