我需要创建一个服务器,允许一次只有一个客户端连接。
规则是仅允许一个客户端连接,如果其他客户端尝试连接,则会看到如下消息:“已经有另一个客户端连接,是否要断开它?”。
然后,如果输入“yes”,该客户端将会被断开连接。
我的问题在于这一步:如何断开一个客户端并连接另一个客户端? 有人可以帮忙吗?
谢谢。
我的问题在于这一步:如何断开一个客户端并连接另一个客户端? 有人可以帮忙吗?
谢谢。
首先构建抽象服务器结构。编写一个程序,在一个线程中接受TCP连接并将其传递给工作线程,工作线程可以读取和发送消息。
您应该保留一个Singleton,其中包含对当前连接的客户端的Worker的引用(或指针,由您选择)(如果没有人连接,则为null)。
为了简单起见,接受器线程应该在每次接受连接时创建一个新的Worker线程,并且当连接断开时,Worker线程将被终止。
现在您必须考虑协议。对于这个简单的任务,5条消息应该足够了。也许每个消息都以endl结尾,因此如果C++中有类似readline的方法,则可以使用它们。
首先是CONNECT
消息。如果没有人连接到服务器,则服务器应返回OK
(第二条消息),如果已经有一个连接,则返回ERROR
(第三条消息)。
第四条消息是CONNECTWITHDISCONNECT
,它将客户端连接到服务器并断开任何其他客户端。新连接的客户端应从服务器接收到OK
消息,而断开连接的客户端应接收到DISCONNECT
(第五条消息)。
CONNECT
,然后它可以要求用户断开其他客户端的连接,如果用户愿意,则客户端发送CONNECTWITHDISCONNECT
。