java socket编程:消息传递顺序

时间:2012-10-25 17:00:49

标签: java sockets network-programming

我是任何类型网络编程的新手。请你回答以下问题。

我正在使用Java。

情景

主题1:

Socket s = new Socket("remote machine", portNum);
//get the outputstream and write **"Message 1"**, close it.

主题2:

Socket s = new Socket("remote machine", portNum);    
//get the outputstream and write **"Message 2"**, close it.

确定线程1打开套接字并在线程2实时执行之前将消息发送到远程机器。

是否保证“远程计算机”以相同的顺序读取它们,即读取消息1,然后读取消息2

注意:订单有保证,因为在发送消息1后,线程1向线程2发送批准以继续。

1 个答案:

答案 0 :(得分:2)

尝试将网络想象为

a)异步 b)不可靠 c)无法控制的

所以,当你发送东西时,事情会在无法控制的情况下并行发生。当您向远程机器发送内容时甚至无法保证,数据(初始数据和数据 - 请参阅TCP)通过相同的路径传输。

TCP管理单个连接的顺序传输,但不是两个。如果您使用/需要两个到同一个服务器/端口,通常这样做是因为您希望它们是独立的。您使用Java进行编程,尝试在单个tcp-socket-connection上同步/分派以确保交付顺序,并使用多个并行运行。