Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在启动服务器和客户端之间的通信_Java_Client Server - Fatal编程技术网

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

Java 正在启动服务器和客户端之间的通信,java,client-server,Java,Client Server,当客户机想要建立与服务器的连接时,通信必须始终从客户机开始吗 我的意思是第一步必须由客户完成?例如,我有一个客户端,它通过Socket连接到服务器。客户端必须首先发送消息?术语很简单。客户端是向服务器发送请求的进程。因此,是的,通信从客户端开始。有几种解决方案可以在服务器端启动通信: 推送技术或服务器推送描述了一种基于Internet的通信方式,其中对给定事务的请求由发布服务器或中央服务器发起。如果您使用javascript,您可以使用comet技术来进行服务器推送 在java中,还有另一个推

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


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

术语很简单。客户端是向服务器发送请求的进程。因此,是的,通信从客户端开始。

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

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

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

  • 如果使用UDP多播,则可以达到与JMS相同的效果,但级别较低(Java也支持)


客户机和服务器是灵活的术语-通常的描述是客户机从服务器请求数据,但哪台机器被视为客户机,哪台是服务器取决于您

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


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

服务器无法知道客户端何时要连接到它。所以,如果我们是关于套接字的,例如在java中,客户机可以连接到服务器,服务器可以向该客户机发送消息,而无需客户机首先向服务器发送消息。这里有一个例子

服务器:

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

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

正是我想要的……谢谢