java 套接字服务器 客户端A -> 服务器 -> 客户端B



我已经使用套接字实现了一个简单的客户端/服务器应用程序,但现在我想这样做——我有一个向服务器写入的ClientA,服务器将消息重定向到ClientB。

ClientA->Server->ClientB

我知道如何实现ClientA和ClientB,但我在服务器内部区分ClientA和Client B时遇到了问题。。。

服务器:我知道如何读取和重新发送消息,我只需要区分客户端的逻辑。

如果我理解这个问题,那么您有一个客户端连接的服务器。

服务器可以具有两个角色中的一个,即"发送方"或"接收方"。当发送方和接收方连接到服务器时,发送方发送数据,然后将数据传递给接收方。这通常被称为"代理"。

一种方法是让服务器监听两个不同的端口,比如3000和4000。连接到端口3000的客户端(例如)希望扮演发送方的角色,而连接到端口4000的客户端则希望接收。如果您有多个发送方和多个接收方,那么在设置数据传输连接之前,客户端将需要向服务器标识自己,并指示要向哪个接收方发送或从哪个接收方接收(例如,通过发送登录参数)。如何完成(发送数据包)的细节被称为"协议",由您负责设计

如果客户端可以同时扮演两个角色(发送方和接收方),那么服务器上就有一个用于所有客户端的侦听端口。然后,客户端必须与服务器通信(通过发送数据包)他们想要建立的连接。再说一遍,这种情况的细节完全取决于你。您必须定义协议。

以下是一个(多种)方法的序列图:

Client A          Server           Client B
   |----login------>|                 |
   |                |<------login-----|
   |                |-------accept--->|
   |<---acccept-----|                 |
   |----data------->|                 |
   |                |-------data----->|
   .                .                 .
   .                .                 .
   .                .                 .

客户端A登录数据消息显示"我是客户端A,我希望向B发送数据"

客户端B登录数据消息显示"我是客户端B,我希望从A接收"

服务器向两者发送"接受"消息。当A收到接受消息时,它开始发送数据,服务器将其转发给B。

要处理的问题包括连接顺序(如果B在A之前连接会怎样)、连接失败(服务器如何通知一个客户端另一个客户端消失)等。这些都是定义协议的一部分。

最新更新