完成迭代效劳器端和客户端
发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像Web效劳器那样不断承受客户端的恳求呢?能,运用 while 轮回即可。修正后面的反响程
千家信息网最后更新 2024年12月12日完成迭代效劳器端和客户端
后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像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安全错误
数据库的锁怎样保障安全
医院网络安全总则
网络安全知识手册报
网络技术对小学生的影响
中办印发网络安全规定
软件开发数据库搭建
康熙小说软件开发
网络安全意识缺失的危害
工银瑞信软件开发招聘
日语式样书 软件开发
mongodb数据库连接方式
软件开发信息安全相关工作
主流的数据库技术
手机厂商数据库在哪里
组装一台服务器 最少要多少钱
数据库删除不了
网络安全是谁的组成部分
徐州市经开区法院网络安全进校园
南充市赵勇软件开发工程师
哈尔滨英语听力软件开发公司
宝山区网络软件开发要多少钱
什么是网络技术栈
服务器开机显示安全模式
兴化自动网络技术联系方式
java比较适合数据库
长沙市普卓软件开发有限公司
东莞软件开发驻场价格表
网络技术与python
安徽交友软件开发定制
u8固定资产结转数据库表
周村考勤管理oa软件开发