2012-01-19 135 views
2

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

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

回答

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() 

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

+0

正是我在找...谢谢 – Mazzy

2

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

0

有几个解决方案,开始在服务器端的通信:

  • 的Push技术,或服务器推送,描述了给定事务的请求发起基于互联网的通信的风格由发布商或中央服务器提供。如果您使用JavaScript,则可以使用慧星技术来执行服务器推送。

  • 在java中存在另一种选择,推动与是消息驱动的通信,其中服务器发送出的JMS消息,并且客户端可以处理

  • 如果使用UDP组播然后同样可以达到与JMS的,但低一个级别(也用Java支持)

2

客户端和服务器是柔性的术语 - 正常描述的是,客户端从服务器请求数据时,但机被视为客户端,哪个是服务器你决定。

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

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

相关问题