如何使用SocketServer在Java中启动与客户端的通信?

时间:2011-11-16 21:37:12

标签: java sockets client-server socketserver

首先,我对使用Socket通信很新,所以还有一些我不知道的事情。我理解Java中Socket通信的基础知识,所以我在这里寻求指南。

现在,关于我的问题,我需要与远程应用程序建立服务器套接字通信。在我的应用程序中,我将运行serverSocket,其他应用程序上的客户端将与我通信。为此通信实现的协议的一部分是必须始终打开此套接字,这为我们提供了两个应用程序之间的永久通信通道。

到目前为止,没有什么比这更好的了。问题是我需要使用mi serverSocket来启动与客户端的对话。这意味着我的serverSocket需要向客户端发送一些信息,而客户端没有请求它。

定义我理解serverSockets是等待客户端与它们建立连接的线程,一旦建立了这个连接,应用程序之间的对话通常从客户端的某个请求(即ENQ字符)开始,以启动信息交流;这适用于实施某些协议以验证,发送和接收数据的情况。否则,信息将由客户端发送,而无需很好的验证和控制。

在正常情况下,如果mi应用程序可以使用客户端与远程应用程序上的serverSocket通信,则会以更自然的方式处理我的问题。但这种情况并非如此。远程应用程序不能有一个serverSocket,它只能有一个客户端(不要问我为什么,这是业务合作伙伴的应用程序,而不是我自己的,并且目前他们不愿意改变他们的通信方案)。

考虑到这一点,我的问题是:有一种方法,只要我的应用程序中的进程需要,我就可以使用我的运行和等待的serverSocket从我的应用程序向远程客户端发送一些信息?我如何从我的应用程序中的第三个bean调用serverSocket中的open socket来编写它?

3 个答案:

答案 0 :(得分:1)

听起来你正在寻找的是UDP套接字。

Give the DatagramSocket class a look.

答案 1 :(得分:0)

  

问题是我需要使用mi serverSocket启动   与客户的对话。这意味着我的serverSocket会   需要在没有客户端的情况下向客户端发送一些信息   要求它。

这甚至没有意义。 ServerSocket的整个想法是客户端启动连接。 ServerSockets无法发送数据。

您需要理清您的要求:如上所述,它没有意义。

答案 2 :(得分:0)

ServerSocket将等待来自其他地方的TCP连接。建立连接后,对ServerSocket.accept()的调用将返回连接到远程系统的新Socket

建立连接后,服务器客户端之间的区别是任意的。没有要求谁必须先传送。这一切都取决于您正在实施的协议。