2017-08-20 154 views
-1

我有兩個自定義程序,一個發送數據流,另一個接收該數據流以進行進一步處理。是否可以將數據發送到一個TCP端口並從同一端口接收(讀取)該數據?如果不是,你可以推薦任何替代方法。任何幫助將不勝感激。 (這兩個程序運行在同一臺機器上)發送和接收來自同一TCP端口的數據包

+0

你的意思是'是否可以從TCP端口發送數據並從同一端口接收數據?' – Legman

+0

因爲這兩個程序都運行在同一臺機器上,所以不必使用套接字(它們是爲了在機器之間使用,但也可以在同一臺機器上使用),您可以使用其他方式[進程間溝通](https://en.wikipedia.org/wiki/Inter-process_communication)如管道或unix插座 – EarthDragon

+0

@Legman .yeah我錯過了問號。 – Rfox

回答

0

TCP連接有兩端,允許雙向通信。每端的發送端口是另一端的接收端口。情況總是如此。

如果你問每個端口的發送端口是否可以與另一端的接收端口相同,答案是肯定的。情況總是如此。

如果你問如果兩端可以有相同的發送和接收端口,答案是:

1)如果源IP地址是在兩端具有相同的(比如說127.0.0.1),那麼絕對不會。如果可能的話,就不可能區分這兩個端點。 2)如果兩次發送的源IP地址不同(例如一端爲127.0.0.2,另一端爲127.0.0.3),這在理論上是可能的,而且如果您使用兩臺不同的機器,則很容易發生。但據我所知,如果兩端都在同一臺機器上,那麼通用TCP/IP協議棧就不允許以這種方式使用單個端口。一旦您在端口上偵聽,您不允許將該端口用作源端口。如果您使用端口作爲源端口,則不允許您開始收聽。

但我覺得你問的是錯誤的問題。如果你澄清了你想要做什麼以及爲什麼,你可能會得到一個不同的問題的答案,這對你會有更多的幫助。

+0

如果它們綁定到不是0.0.0.0的不同本地IP地址,但是它們是否可以通信是另一個問題,則可以在本地使用相同的端口。 – EJP

+0

也許'bind(127.0.0.1:9999); listen()'一端和'bind(127.0.0.2:9999);連接(127.0.0.1:9999)'在另一端? –