C++ Socket网络编程 简易服务端和客户端1.1版本改进(三)

上一个版本只是 简单的搭建了 TCP 服务端和客户端程序
因此在此基础上继续升级 以开发更多的功能
在1.0版本中 服务端通过while循环 等待新客户端的连接 在1.1的版本中 希望能让服务端持续处理客户端发送的请求
在这里插入图片描述
1、 改造服务端程序
前四步不需改变(1)建立socket (2)绑定端口 (3) 监听端口 (4)等待客户端链接

接着是循环接受 (5)客户端发送的请求 (6)处理客户端发送的请求 (7)答复客户端的请求

char _recvBuf[128] = {};
	while (true)
	{
		//5 接受客户端请求数据
		int nlen = recv(_clientSock, _recvBuf, 128, 0); //接受客户端的数据 第一个参数应该是客户端的socket对象
		if (nlen <= 0)
		{
			//客户端退出
			cout << "客户端已退出,任务结束" << endl;
			break;
		}
		cout << "收到命令:" << _recvBuf << endl;
		//6 处理请求  这里只是简单的字符串判断
		if (0 == strcmp(_recvBuf, "getName"))
		{
			//	7. 向客户端发送一条数据 send
			char msgBuf[] = "Evila";
			send(_clientSock, msgBuf, strlen(msgBuf) + 1, 0); //+1是为了把\0算进去
		}
		else if (0 == strcmp(_recvBuf, "getAge"))
		{
			//	7. 向客户端发送一条数据 send
			char msgBuf[] = "80";
			send(_clientSock, msgBuf, strlen(msgBuf) + 1, 0); //+1是为了把\0算进去
		}
		else
		{
			//	7. 向客户端发送一条数据 send
			char msgBuf[] = "Hello, I'm Server";
			send(_clientSock, msgBuf, strlen(msgBuf) + 1, 0); //+1是为了把\0算进去
		}
	}

2、改造客户端程序
前两步不需改变(1)建立socket (2)连接到服务端

接着是循环输入、发送请求给服务端并接受服务端的答复 (流程见上图)

	while (true)
	{
		// 3 输入请求命令
		char cmdBuf[128] = {};
		cout << "输入命令: ";
		cin >> cmdBuf;
		// 4 处理请求
		if (strcmp(cmdBuf, "exit") == 0)
		{
			break;
		}
		else
		{
			// 5 向服务器发送请求命令
			send(_sock, cmdBuf, strlen(cmdBuf) + 1, 0);
		}
		//放到循环中 重复接受服务器的返回信息
		//6. 接受服务器信息 recv
		char recvBuf[256] = {};
		int nlen = recv(_sock, recvBuf, sizeof(recvBuf), 0); //返回值是接收数据的长度
		if (nlen > 0)
		{
			cout << recvBuf << endl;
		}
		else
		{
			cout << "ERROR: 数据传输失败..." << endl;
		}
	}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/La745739773/article/details/89043427