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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Synchronization_Client - Fatal编程技术网

Java套接字:是否可以同步从服务器到客户端的数据发送和接收,反之亦然?

Java套接字:是否可以同步从服务器到客户端的数据发送和接收,反之亦然?,java,sockets,synchronization,client,Java,Sockets,Synchronization,Client,我一直在使用套接字,并设法创建了一个程序,将客户端链接到服务器,我的朋友可以加入。我似乎有一个问题,在数据从服务器发送到客户端并被客户端接收之前,数据并不总是完全构造好的,这导致来自服务器的消息有时毫无意义。是否有任何方法仅在输入完全发送时才将输入扫描到客户端?简单地说,如何同步从服务器发送到客户机的数据的发送和下载,以及如何同步从服务器发送到客户机的数据的发送和下载,以便仅在整个消息到达其中一方后才能读取?抱歉,如果这听起来让人困惑,但这是我唯一能说出它的方式。谢谢。您能提供一个(简明的)代码

我一直在使用套接字,并设法创建了一个程序,将客户端链接到服务器,我的朋友可以加入。我似乎有一个问题,在数据从服务器发送到客户端并被客户端接收之前,数据并不总是完全构造好的,这导致来自服务器的消息有时毫无意义。是否有任何方法仅在输入完全发送时才将输入扫描到客户端?简单地说,如何同步从服务器发送到客户机的数据的发送和下载,以及如何同步从服务器发送到客户机的数据的发送和下载,以便仅在整个消息到达其中一方后才能读取?抱歉,如果这听起来让人困惑,但这是我唯一能说出它的方式。谢谢。

您能提供一个(简明的)代码示例吗?否则我们只能猜测问题出在哪里……代码不是问题所在。我只是不知道是否有可能检测到InputBuffer何时发生了更改,然后读取输入然后再读取。因此,我可以避免只使用while(true)循环来读取输入流,有时会中途切断数据。比如,如果我从服务器发送Hello,但客户机在Hello完全到达并打印出“He”之前就开始读取,那么您需要一种方法来将接收到的数据的“块”分离为文本行,在它们之间添加空字符,任何东西。然后,在接收端,继续读取,直到遇到分隔符,然后才处理数据。在读取之前,等待所有数据都已输入,这将完全不符合流式传输数据的目的。就像前面提到的@Inerdial一样,您应该定义一个消息边界,您的客户机和服务器可以使用该边界来确定消息何时实际完成。