java socket发送和接受是不是同一个端口_为什么Java ServerSocket accept()返回一个与ServerSocket具有相同端口的套接字?...

TCP连接由四个数字标识:

客户端(或对等方1)IP

服务器(或对等2)IP

客户端端口

服务器端口

典型的TCP连接打开如下:

客户端IP由客户端的ISP或NAT提供 .

服务器IP由用户提供或在DNS中查找 .

客户端从未分配的范围中任意选择一个端口(同时避免重复四倍)

服务器端口由协议提供或明确指定 .

您在ServerSocket中指定的端口是客户端连接到的端口 . 它只不过是操作系统知道属于您的应用程序的端口号,以及将事件从操作系统传递到应用程序的对象 .

ServerSocket#accept 方法返回 Socket . Socket是一个包装单个TCP连接的对象 . 也就是客户端IP,服务器IP,客户端TCP端口和服务器TCP端口(以及传递相关数据的一些方法)

客户端发送的第一个TCP数据包必须包含应用程序侦听的服务器端口,否则操作系统将不知道该连接属于哪个应用程序 .

此外,没有动力将服务器TCP端口切换到另一个号码 . 它对服务器机器或客户端机器没有帮助,它需要一些开销来执行(你需要将新的和旧的TCP端口一起发送),并且还有额外的开销,因为服务器操作系统无法再识别应用程序单个端口 - 它需要将应用程序与其使用的所有服务器端口相关联(客户端仍需要执行此操作,但典型客户端的连接数少于典型服务器)

你看到的是什么

两个入站连接,属于服务器(本地端口:1234) . 每个服务器应用程序中都有自己的 Socket .

两个出站连接,属于客户端(远程端口:1234) . 每个客户端应用程序中都有自己的 Socket .

一个监听连接,属于服务器 . 这对应于接受连接的单个 ServerSocket .

由于它们是环回连接,因此您可以在一台计算机上看到两个 endpoints 混合在一起 . 您还可以在本地端和远程端看到两个不同的客户端端口(52506和52511) .

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值