当客户想要建立与服务器的连接时,通信是否必须始终从客户端开始?
我的意思是第一步必须由客户完成?例如,我有一个通过Socket
连接到服务器的客户端。客户端必须首先发送消息吗?
答案 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中也支持)