我有2个进程在不同的机器上运行,这些机器通过TCP套接字进行通信。
这两个进程的代码既可以作为服务器,也可以作为客户端。
I.e. ProcessA已打开一个服务器套接字,该端口绑定在端口X上,并且ProcessB已在端口Y上打开服务器套接字绑定。
ProcessA打开一个客户端套接字与ProcessB连接并开始以客户端 发送消息并接收响应(当然通过相同的tcp连接)。 ProcessB一旦接收到消息并对其进行处理,它就发送响应,但也可以通过第二个TCP连接发送消息,即ProcessB已经打开了一个客户端套接字到ProcessA的portX。
所以消息流是通过2个不同的TCP连接。
我的问题是这样的:以作为理所当然地认为,这个“建筑”不能改变,必须保持原样:
我有间歇性,消息来自进程B发送到ProcessA通过TCP连接是进程B有问题打开客户端套接字,在消息通过ProcessA作为客户端套接字连接的tcp连接作为从ProcessB到ProcessA的响应发送之前到达processA。
I.e.这两个流发生java网络编程协调消息传递
(1)
ProcessA ---->(msg)----> ProcessB(PortY) (TCP1)
ProcessB does processing
ProcessB(portY)--->(response)----->ProcessA (TCP1)
ProcessB--->(msg)----->ProcessA(portX) (TCP2)
(2)
ProcessA ---->(msg)----> ProcessB(PortY) (TCP1)
ProcessB does processing
ProcessB--->(msg)----->ProcessA(portX) (TCP2)
ProcessB(portY)--->(response)----->ProcessA (TCP1)
我如何可以强制执行/确保进程B不超过该进程B有一个客户端套接字开放ProcessA的服务器端口X,之前连接发送味精从ProcessB的服务器portY发送的消息作为回复发送到processA?即只有上述流程(1)。
请注意,processB是多线程的,处理是非平凡的。
UPDATE: 可能是我的错觉,但是当一个进程通过套接字发送数据,并控制返回到应用程序,这并不意味着接收方已经接收到的数据。 因此,如果一个进程通过2个套接字发送数据,OS是否存在竞争条件?
UPDATE2
答案,我从维杰马修拿到后:
如果我做了一个锁定的建议,是有保证的是OS(即IP层)会为了发送数据?即完成一次传输,然后发送下一个?或者我会将它们复用并具有相同的问题?
感谢
你能澄清吗?你的意思是B不应该通过portX发送* next *请求给A,直到*前一个*答复已经通过端口X从A到达了?所以Y港口在这里完全不相关? – EJP 2010-11-18 08:08:26
@ejp:有2个tcp连接。 B不应该通过端口X向A发送消息(在A中打开),而是在A收到之前消息的回复(由A发送给在端口Y上监听的B)之前由A接收。这是否更清楚?所以portY并不是无关紧要的。 A发送的第一个消息是tcp连接。 – Cratylus 2010-11-18 08:13:54
你的段落开头'我怎么能确保'根本没有提到港口Y.所以它不同意你刚才说的。你能把所有这些变成协议吗?所以我认为B端口不应该在端口X上发送任何东西,而在端口Y上有待处理的回复。反过来也是如此吗? – EJP 2010-11-18 10:01:32