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;
}
}
运行结果如下: