Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java套接字服务器客户端->;服务器->;客户B_Java_Sockets_Redirect_Client - Fatal编程技术网

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

java套接字服务器客户端->;服务器->;客户B,java,sockets,redirect,client,Java,Sockets,Redirect,Client,我已经使用套接字实现了一个简单的客户机/服务器应用程序,但现在我想这样做,我有一个ClientA可以写入服务器,服务器将消息重定向到ClientB ClientA->Server->ClientB 我知道如何实现ClientA和ClientB,但是在服务器内部我很难区分ClientA和ClientB 服务器:我知道如何读取和重新发送消息,我只需要逻辑来区分客户端。如果我理解这个问题,您有一个客户端连接的服务器 服务器可以具有两个角色之一,即“发送方”或“接收方”。当发送方和接收方连接到服务器时,

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

ClientA->Server->ClientB

我知道如何实现ClientA和ClientB,但是在服务器内部我很难区分ClientA和ClientB


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

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

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

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

如果客户机可以同时承担这两个角色(发送方和接收方),那么您将在服务器上为所有客户机提供一个侦听端口。然后,客户机必须(通过发送数据包)与服务器通信他们想要建立的连接。再说一次,这是如何发生的细节完全取决于你。您必须定义协议

以下是实现此目的的一种(多种)方法的序列图:

Client A          Server           Client B
   |----login------>|                 |
   |                |<------login-----|
   |                |-------accept--->|
   |<---acccept-----|                 |
   |----data------->|                 |
   |                |-------data----->|
   .                .                 .
   .                .                 .
   .                .                 .
客户端A服务器客户端B
|----登录------->|
|                ||
||                 |
||------数据------>|
.                .                 .
.                .                 .
.                .                 .
客户端A登录数据消息显示“我是客户端A,我希望向B发送数据”

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

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


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

我不确定我是否理解这个问题。您有两个连接在两个套接字上的客户端,希望从一个套接字读取数据,然后向另一个套接字写入数据。套接字具有标识客户端(IP、端口)的元数据。你还需要什么?我需要一些标志,以知道我是接收者还是发送者。因为有了ip,我永远不知道自己是谁。当客户端连接到服务器时,哪个客户端在发送,哪个客户端在接收完全取决于您通过某种方式来确定。您必须根据您的具体应用做出并跟踪该决定。这不是一个其他人可以回答的问题。我知道这取决于我如何实现,我只是不知道如何获得这两个连接,然后找出谁是谁。您能发布一个简单的代码,说明如何定义服务器中的谁吗?提前谢谢!我想我明白了!昨天我画了完全相同的序列图。我对网络、插座、连接知之甚少。。这有助于澄清一切。谢谢@Jim Garrison