完成迭代效劳器端和客户端
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像Web效劳器那样不断承受客户端的恳求呢?能,运用 while 轮回即可。修正后面的反响程
千家信息网最后更新 2024年11月14日完成迭代效劳器端和客户端
后面的程序,不论效劳器端照样客户端,都有一个成绩,就是处置完一个恳求立刻加入了,没有太大的实践意义。能不克不及像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安全错误
数据库的锁怎样保障安全
济宁安卓软件开发哪家做的好
3d交互软件开发
苹果手机服务器停用怎么解决
软件开发的职级
重庆电商软件开发费用是多少
数据库迁移导致对象名无效
软件开发首先需要学什么
网络安全威胁表现在哪些方面
承德软件开发优缺点
服务器虚拟化基本原理
教育窗口优化服务器
国企招聘软件开发
数据库与水晶报表
平罗县中小学开展网络安全宣传
memdb 内存数据库
针对服务器的问题
我的世界浙大服务器的编号
道通智能软件开发
金山区海航软件开发问答知识
深圳华欧空计算机软件开发
恢复sql数据库数据
数据库核心技术有哪些
讯游科技与互联网
软件开发的职级
服务器格言
将数据库降序排列
网络安全教育科普问题
南京移动软件开发哪家好
中土科技 工业互联网
青岛网警怎么防范网络安全