如何使客户机-服务器Java应用程序在一个端口上发送消息,但在另一个端口上接收消息?

如何使客户机-服务器Java应用程序在一个端口上发送消息,但在另一个端口上接收消息?,java,sockets,client-server,port,Java,Sockets,Client Server,Port,我目前正在尝试制作一个应用程序,它将使用一个端口向服务器发送消息,但在另一个端口接收消息。然而,根据我所遵循的教程,连接到服务器的行为似乎是端口发挥作用的地方,而我的客户端在同一端口上接收和发送消息。如何使它在一个端口上发送,但在另一个端口上接收 以下是我认为与客户端相关的代码(我放了一些看起来不相关的东西,因为我认为它们可能会通过在一个端口上接收而在另一个端口上发送而改变,忽略关于替换inetaddress的注释,这只是我在gui中实现的): 编辑/更新:为了帮助澄清一些事情,这里有一些更多的

我目前正在尝试制作一个应用程序,它将使用一个端口向服务器发送消息,但在另一个端口接收消息。然而,根据我所遵循的教程,连接到服务器的行为似乎是端口发挥作用的地方,而我的客户端在同一端口上接收和发送消息。如何使它在一个端口上发送,但在另一个端口上接收

以下是我认为与客户端相关的代码(我放了一些看起来不相关的东西,因为我认为它们可能会通过在一个端口上接收而在另一个端口上发送而改变,忽略关于替换inetaddress的注释,这只是我在gui中实现的):


编辑/更新:为了帮助澄清一些事情,这里有一些更多的信息。发送第一条信息的设备连接到传感器,当传感器检测到其他设备时,它会发送信息。接收设备在不同的端口发回一条消息,告诉原始发送设备如何响应。让我们把这两个设备命名为“记者行动接受者”和“决策者指挥官”

如果要使用TCP/IP套接字,则不能使用一个套接字发送,另一个套接字读取。那不是他们的目的

如果使用集中式分布式算法(服务器/客户端通信),则必须将服务器设置为使用ServerSocket类侦听单个套接字端口:然后服务器尝试通过该套接字接受客户端

例如:

ServerSocket listener = new ServerSocket(Port)
While (true) {
    new Clienthandler(listener.accept());
}

服务器将侦听该端口,当客户端尝试连接到该端口时,如果该端口被接受,服务器将启动其处理程序。在此处理程序构造函数上,客户端上使用的套接字对象在参数上接收,然后可用于获取写入程序和读取器。此处理程序类上的读卡器将是客户端类上的写卡器,反之亦然,这可能就是您要寻找的。

如果要使用TCP/IP套接字,则不能使用一个套接字发送,另一个套接字读取。那不是他们的目的

如果使用集中式分布式算法(服务器/客户端通信),则必须将服务器设置为使用ServerSocket类侦听单个套接字端口:然后服务器尝试通过该套接字接受客户端

例如:

ServerSocket listener = new ServerSocket(Port)
While (true) {
    new Clienthandler(listener.accept());
}

服务器将侦听该端口,当客户端尝试连接到该端口时,如果该端口被接受,服务器将启动其处理程序。在此处理程序构造函数上,客户端上使用的套接字对象在参数上接收,然后可用于获取写入程序和读取器。这个处理程序类上的读者将是客户机类上的作者,反之亦然,也许这就是您要寻找的。

您关于以这种方式使用两个端口的问题有点奇怪。您声明您有一个客户端和一个服务器,它们应该在不同的端口上通信

只是为了澄清一下,将服务器想象成一个挂着几排挂钩的夹克的架子。服务器侦听的每个端口都代表一个钩子。当涉及到客户机-服务器关系时,客户机或夹克知道在哪里可以找到它的钩子,但是钩子是盲目的,不知道在哪里可以找到夹克

现在,客户端选择一个端口或钩子并连接到它。连接就像一条有两条管道的管道。一个用于客户端向服务器传递数据,另一个用于将数据从服务器发送回客户端。建立连接后,数据可以双向传输。这意味着我们只需要在服务器上打开一个端口,就可以将数据从客户端发送到服务器,并以相反的方向发送

在服务器上只打开一个开放端口供客户端连接的原因是,在常规客户端计算机上很难保持一个开放端口供连接。普通桌面用户将在几个防火墙后面阻止传入连接。如果不是这样,客户端可能会被恶意病毒毫无意义地入侵

继续使用双端口解决方案,我们不能称之为客户机-服务器连接。它更像是点对点连接或类似的东西。但是,如果这是您想要做的,首先连接的应用程序必须告诉另一个应用程序要使用什么ip和端口来连接回,它可能还需要提供某种令牌,用于在连接回时配对新的传入连接


您应该注意,在大多数情况下,实现这样一个实现并不是一个好主意,因为对于客户端和服务器应用程序之间的简单数据传输来说,它会使事情变得非常复杂

您关于以这种方式使用两个端口的问题有点奇怪。您声明您有一个客户端和一个服务器,它们应该在不同的端口上通信

只是为了澄清一下,将服务器想象成一个挂着几排挂钩的夹克的架子。服务器侦听的每个端口都代表一个钩子。当涉及到客户机-服务器关系时,客户机或夹克知道在哪里可以找到它的钩子,但是钩子是盲目的,不知道在哪里可以找到夹克

现在,客户端选择一个端口或钩子并连接到它。连接就像一条有两条管道的管道。一个用于客户端向服务器传递数据,另一个用于将数据从服务器发送回客户端。建立连接后,数据可以双向传输。这意味着我们只需要在服务器上打开一个端口,就可以将数据从客户端发送到服务器,并以相反的方向发送

在服务器上只打开一个开放端口供客户端连接的原因是,在常规客户端计算机上很难保持一个开放端口供连接。普通桌面用户将是b