完成迭代效劳器端和客户端
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像Web效劳器那样不断承受客户端的恳求呢?能,运用 while 轮回即可。修正后面的反响程
千家信息网最后更新 2025年01月20日完成迭代效劳器端和客户端
后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像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安全错误
数据库的锁怎样保障安全
临沂市网络安全信息办公室
天津软件开发退税流程
华为网络技术学院昆明接口人
个人服务器可以下载游戏玩吗
服务器视频加速
盒马网络技术有限公司 地址
云课堂可以改服务器吗
山东联通宽带服务器云服务器
电视海尔服务器
互联网蓝色科技ppt
数据库设计命名规则
常州网络技术培训机构
网络安全相关专业毕业生人数
网络技术应用题三年级
西安电信宽带服务器设置
广西区块链网络安全
网络安全模式启动声音
中小家庭教育与网络安全读后感
奉贤区销售软件开发大概费用
凯里ibm服务器专卖
360网络安全四大顶级期刊
中学生网络安全教育简报
上海互联网软件开发需要多少钱
软件开发无法去美化
服务器端运行vba的方法
从事网络技术工作的男人
海运网络安全案例
路北区项目网络技术不二之选
计算机网络技术网测视频
网络数据库分为几种类型