【问题标题】:Send and Receive packets from same TCP port从同一个 TCP 端口发送和接收数据包
【发布时间】:2017-08-21 04:50:52
【问题描述】:

我有两个自定义程序,一个发送数据流,另一个接收该数据流以进行进一步处理。是否可以将数据发送到一个 TCP 端口并从同一端口接收(读取)该数据?如果不能,您可以推荐任何替代方法。任何帮助将不胜感激。 (两个程序在同一台机器上运行)

【问题讨论】:

  • 您的意思是“是否可以从 TCP 端口发送数据并从同一端口接收数据?”
  • 由于两个程序都在同一台机器上运行,所以你不必使用套接字(它们是在机器之间使用的,但也可以在同一台机器上使用),你可以使用inter-process communication 的其他方式,例如管道或 unix 套接字
  • @Legman 。是的,我错过了问号。
  • @Rdoz 他们这样实现的。 TCP 套接字是全双工的。
  • 为什么要在同一台机器上使用同一个端口?典型的 TCP 实现是客户端(调用 connect 的那个)选择一个随机端口进行连接,而服务器(调用 accept 的那个)监听一个预定义的端口。

标签: java sockets networking tcp


【解决方案1】:

TCP 连接有两端,允许双向通信。每一端的发送端口是另一端的接收端口。情况总是如此。

如果您要问是否每一端的发送端口可以与另一端的接收端口相同,答案是肯定的。总是这样。

如果你问两端是否可以有相同的发送和接收端口,答案是:

1) 如果两端的源 IP 地址相同(比如127.0.0.1),那么绝对不是。如果可以,就不可能区分这两个端点。

2) 如果两次发送的源 IP 地址不同(例如一端为 127.0.0.2,另一端为 127.0.0.3),这在理论上是可能的,并且如果您使用两台不同的机器很容易发生这种情况。但据我所知,如果两端都在同一台机器上,则没有通用的 TCP/IP 堆栈允许以这种方式使用单个端口。一旦你在一个端口上监听,你就不能将该端口用作源端口。如果您使用端口作为源端口,则不允许您开始监听它。

但我感觉你问错了问题。如果您澄清了您想要做什么以及为什么,您可能会得到一个对您更有帮助的不同问题的答案。

【讨论】:

  • 如果它们绑定到不同的本地IP地址不是0.0.0.0,你可以在本地使用相同的端口,但是它们是否可以通信是另一个问题。
  • 所以也许bind(127.0.0.1:9999); listen() 在一端,bind(127.0.0.2:9999); connect(127.0.0.1:9999) 在另一端?
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2014-01-23
  • 1970-01-01
相关资源
最近更新 更多