我有一个客户端/服务器程序,允许多个客户端通过服务器产生的线程提供服务。目前该程序只是与服务器通信,但我现在想重新设计程序,以便客户端可以与另一个客户端建立通信。 在设计这方面我没有太多的经验知道什么是正确的方向。最初我想通过服务器线程进行通信,但是我不知道如何通知另一个客户端想要建立通信的那个线程的客户端。客户端到客户端套接字通信
比如我想要传达的CLI从A到CLI N:
Cli A <---> SerThread A <------> Main Thread <------> SerThread N <---> Cli N
我不知道Cli时N可以如何被告知的是,CLI A需要与之通信。
直到客户端从套接字读取它不会知道另一个客户端要与它通信。因此,如果Cli N处于等待用户输入状态,直到发送/接收它不知道。 我需要一种方法来立即通知客户端通信正在等待它。
我越想越觉得困惑,所以我可能需要一些指导,然后才正确地尝试设计它。
客户端是否仍然首先连接到服务器?服务器不能告诉客户有关其他客户的信息吗? – Default 2013-02-17 12:07:20
是的,但是客户端还没有完成的情况如何在套接字上接收,例如等待用户输入发送/接收。客户端只有在发送/接收完成后才会收到通知,并且这是用户的通知。有没有办法立即通知客户?我是否必须为此创建另一个套接字连接? – SmalekTF 2013-02-17 22:54:00
客户端应该始终在recv()中被阻塞(或者,更可能在select()或poll()或某些等价函数中,只要字节可用于从服务器接收,就会返回)。一旦完成,服务器所要做的就是将适当的字节发送到客户端,这足以唤醒客户端并使其处理字节。 – 2013-02-17 23:52:43