C++ Socket网络编程 1.3版本 在客户端中加入多线程 实现输入功能

在改造客户端为select网络模型的时候,由于C++的标准输入流函数cin是阻塞函数,因此暂时将其删掉。
本节引入线程,与主线程分离的处理客户端的输入命令逻辑业务。

编写一个函数,用于客户端循环输入命令,并send给服务端处理。

bool g_bRun = true; //全局变量,用于控制客户端程序是否结束,如果这个值是false,那么主线程应该结束运行。因此,主线程中,循环进行select函数的代码段编程了 while (g_bRun){......}
void cmdThread(SOCKET _sock)
{
	while (true)
	{
		// 3 输入请求命令
		char cmdBuf[128] = {};
		cout << "输入命令: ";
		cin >> cmdBuf;
		// 4 处理请求
		if (strcmp(cmdBuf, "exit") == 0)
		{
			cout << "退出cmdThread线程" << endl;
			g_bRun = false;
			return;
		}
		else if (0 == strcmp(cmdBuf, "login"))
		{
			Login _login;
			strcpy(_login.userName, "Evila");
			strcpy(_login.Password, "Evila_Password");
			// 5 向服务器发送请求命令
			send(_sock, (const char*)&_login, _login.dataLength, 0);
		}
		else if (0 == strcmp(cmdBuf, "logout"))
		{
			Logout _logout;
			strcpy(_logout.userName, "Evila");
			//5 向服务器发送请求命令
			send(_sock, (const char*)&_logout, _logout.dataLength, 0);
		}
		else
		{
			cout << "不受支持的命令" << endl;
		}
	}
	return;
}

猜你喜欢

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