本文介绍了C ++ winsock多客户端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在我的代码中添加对许多客户端的支持。另外,如何以一种清晰且实际有意义的方式完成这项工作。

How would it be possible to add support for many clients into my code. Also how can this be done in a way that is clear and actually make sense.

class classServer
{
private:
	char *buffer;
	WSADATA theWSA;
	SOCKET theSocket,theOtherSocket;
public:
	classServer();
	void makeSocketLoad()
	{
		WSAStartup(MAKEWORD(2,2),&theWSA);
		theSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	}
	void sockConnect(int port)
	{
		struct sockaddr_in serverInf;
		serverInf.sin_family=AF_INET;
		serverInf.sin_addr.s_addr=INADDR_ANY;
		serverInf.sin_port=htons(port);
		if(bind(theSocket,(SOCKADDR*)&serverInf,sizeof(serverInf)) == SOCKET_ERROR)
		{
			std::cout<<"Unable to bind socket!\r\n";
			WSACleanup();
			system("PAUSE");
		}
	}
	void getDataStream()
	{
		listen(theSocket,1);

		SOCKET TempSock=SOCKET_ERROR;
		while(TempSock==SOCKET_ERROR)
		{
			std::cout<<"Waiting for incoming connections...\r\n";
			TempSock=accept(theSocket,NULL,NULL);
		}
		theSocket=TempSock;

		std::cout<<"Client connected!\r\n\r\n";
		char *buffer = new char[1002];
		std::string data;
		int inDataSize;
		while(true)
		{
			inDataSize = recv(theSocket,buffer,1000,0);
			data = buffer;
			if(inDataSize > 0)
			{
				std::cout << data << std::endl;
				if(data == "exit")
				{
					std::cout << "EXIT NOW" << std::endl;
					exit(0);
					break;
				}
			}
		}
	}
	void killWinsock()
	{
		closesocket(theOtherSocket);
		closesocket(theSocket);
		WSACleanup();
	}
};

classServer::classServer()
{
	buffer = new char[1002];
}





我的尝试:



查看大量令人困惑的代码,尝试实现这一点。



What I have tried:

Looking through large amounts of confusing code, to try to implement this.

推荐答案


这篇关于C ++ winsock多客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-16 21:43