【发布时间】:2011-11-15 18:39:05
【问题描述】:
好的,所以我是套接字编程的新手,我正在制作一个将从服务器运行的游戏。我将尝试让一百个客户从我的服务器上运行。我应该为每个客户创建一个侦听器实例还是一个?此外,我尝试在 100 个不同的端口上创建 100 个侦听器,但是当我运行服务器时,尝试启动侦听器时出现错误。游戏将是一个 3D RPG/MMORPG。不过,大部分游戏逻辑都在客户端中。你觉得我应该怎么做?
【问题讨论】:
标签: c# client tcplistener
好的,所以我是套接字编程的新手,我正在制作一个将从服务器运行的游戏。我将尝试让一百个客户从我的服务器上运行。我应该为每个客户创建一个侦听器实例还是一个?此外,我尝试在 100 个不同的端口上创建 100 个侦听器,但是当我运行服务器时,尝试启动侦听器时出现错误。游戏将是一个 3D RPG/MMORPG。不过,大部分游戏逻辑都在客户端中。你觉得我应该怎么做?
【问题讨论】:
标签: c# client tcplistener
每个服务器端点只有一个侦听器。然后侦听器将为使用不同端口的客户端创建一个连接。正是您实际用于通信的这种连接。
【讨论】:
如果您打算使用 TCP 套接字,那么您应该创建 一个 侦听器套接字(即创建一个套接字,将其绑定到特定端口并在其上调用 Listen())。然后,当您接受连接并获得另一个套接字时,您可以使用该套接字从/向客户端接收/发送数据:
Socket socketListener;
// create listening socket
socketListener = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 30120); // use port 30120
//bind to local IP Address.
socketListener.Bind(ipLocal);
//start listening
socketListener.Listen(4);
while (true) // loop that accepts client connections
{
Socket socketWorker = socketListener.Accept();
HandleClientConnection(socketWorker); // your routine where you communicate with a client
}
另外,考虑在异步模式下使用套接字,这在性能方面会更有效。
【讨论】: