首先,我正在处理的环境是Windows 7和Visual Studio 2010。
我已经编写了一个使用select方法从多个客户端检索数据的服务器。
我还通过运行(client.exe localhost 4444 Peter
)编写了一个连接到上面服务器的客户端。 “Peter”是此用户想要使用的用户名。
现在假设我们在服务器上连接了两个用户。他们每个人都能够运行命令/help
。这将返回用户可以使用的其他一些命令。其中一个命令是/listusr
,它返回服务器上的所有用户。
另一个命令是/talk2
,这是我的问题所在的地方。我想让用户选择其他用户想要聊天。例如,如果你想和彼得谈谈,你可以/talk2 Peter
。
我将如何开始这样的活动?服务器如何将消息从我发送给Peter(我必须在此处添加,当新用户连接时,服务器将他/她的用户名和他/她的套接字号保存在结构中)?
我是否需要为每个对话或新进程创建新线程?有人可以给我一些暗示或建议继续我的项目吗?我现在对如何管理感到困惑。
答案 0 :(得分:2)
都不是。您的服务器应该维护某种类型的数据结构,该结构将用户ID与客户端套接字句柄相匹配。当请求带有/talk2
命令时,服务器应该查找该用户标识的相应套接字句柄,并且应该使用send()
中继该消息。
答案 1 :(得分:1)
可扩展的方式是你的服务器负责告诉两个客户端另一方的IP地址,然后彼得和你建立连接以便你可以说话。
如果您真的想让服务器转移会话,您需要考虑以下因素以获得更好的可扩展性:
答案 2 :(得分:0)
尝试每一个并检查哪一个最适合您。这是一个设计问题,因此不可能有一个硬性和快速的解决方案。这取决于您的应用程序的用途。您可能还想使用(可能是您已经在使用)sendto和recvfrom函数。