启动服务器和客户端之间的通信

时间:2012-01-19 12:43:28

标签: java client-server

当客户想要建立与服务器的连接时,通信是否必须始终从客户端开始?

我的意思是第一步必须由客户完成?例如,我有一个通过Socket连接到服务器的客户端。客户端必须首先发送消息吗?

4 个答案:

答案 0 :(得分:3)

服务器无法知道客户端何时想要连接它。因此,如果我们在Java中使用套接字,客户端可以连接到服务器,并且服务器可以向该客户端发送消息,而客户端不需要首先向服务器发送消息。这是一个例子

SERVER:

int port = 3456;
ServerSocket server = new ServerSocket(port);
Socket socket;
socket = server.accept();
socket.getOutputStream().write(10);

客户端:

Socket socket = new Socket("server", 3456);
socket.getInputStream().read()

所以客户端连接到服务器。服务器接受连接并写入要发送给客户端的数据。客户端使用输入流来读取此数据。因此,客户端可能不会先发送消息,而只需要连接到服务器。

答案 1 :(得分:2)

术语很简单。客户端是向服务器发送请求的过程。所以是通信从客户端开始。

答案 2 :(得分:2)

客户端和服务器是灵活的术语 - 正常的描述是客户端从服务器请求数据,但哪台机器被视为客户端,哪台服务器由您决定。

服务器启动与客户端的连接存在技术问题。例如,服务器必须知道客户端的地址 - 如果您使用NAT等遍历网络,这将成为一个大问题。通常,服务器有一个全局地址,所有客户都知道。

您还拥有防火墙和其他网络保护措施,这些措施通常只允许从客户端到服务器的连接。

答案 3 :(得分:0)

有一些解决方案可以在服务器端启动通信:

  • Push技术或服务器推送描述了一种基于Internet的通信方式,其中给定事务的请求由发布者或中央服务器发起。如果您使用javascript,您可以使用彗星技术进行服务器推送。

  • 在java中还有另一个推送消息驱动通信的选项,其中服务器发送JMS消息,客户端可以处理

  • 如果您使用UDP多播,那么可以达到与JMS相同的程度,但是低一级(在Java中也支持)