关于Socket 设置 IPAddress.Any 情况下,出现服务器积极拒绝的问题

简介:

前几天在做p2p TCP穿透的时候,发现了一个很严重的一个问题,由于需要做点对点穿透,无法预知外网IP和内网IP哪个会被连接,所以 P点 机器上使用了 socket.bind(IPAddress.Any, port); 并且使用端口复用,socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //设置端口可重用 。以下称A机器,B机器,S服务器。A向B做穿透连接。

在B的同一个端口上,启动了连接S服务器的socket 和一个监听另一个P机器连接的socket ,但是问题出现了,在服务器S帮忙穿透后,A向B连接时,出现了无法连接,服务器积极拒绝的情况。后来在局域网中测试,发现把B的 bind 的 IPAddress.Any, 改成 固定的内网IP后,没有出现那种情况。

刚开始很郁闷,不是IPAddress.Any 可以在任何IP接口上启动监听吗,怎么不行?

一想,可能是B的端口复用上出现了问题,因为在同一个端口上绑定了另外一个Socket , 当然,端口复用不是问题所在,而是在端口复用的另一个Socket 上 (与 S 做连接的Socket ) 绑定的是固定的内网IP,而不是IPAddress.Any 。 具体也不知道原理,我猜想可能是绑定固定IP的SOCKET 比较优先吧,所以导致另一个复用的端口不能正常在IPAddress.Any 监听。后来,把那个绑定固定IP的SOCKET 也改成IPAddress.Any 就没有出现问题了。

情况复杂,说得比较乱,完全是自己备忘和给有心人提个醒。

为这个问题郁闷了半天,下班回家晚上快睡觉的时候,慢慢整理出一个头绪,想到可能可以解决的办法。

后来查了资料,才明白了原理:端口复用时,当连接到来时,按最明确及最近绑定的原则将连接交给某一个应用处理
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2012/03/09/2388260.html如需转载请自行联系原作者

jiahuafu

相关文章
|
12天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
15天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。
|
1月前
|
弹性计算 监控
ecs合理设置CPUCredits
阿里云ECS的Burstable实例使用CPU Credits管理额外计算能力。监控应用负载以评估CPU需求,选择合适实例类型,优化工作负载分配,确保 Credits 累积与消耗平衡。当Credits不足时,可升级实例或调整工作负载。关注阿里云最新文档以获取准确操作指南。
22 3
|
1月前
|
Java Python
如何设置代理ip服务器地址
如何设置代理ip服务器地址
55 0
|
1月前
|
API 数据安全/隐私保护
Outlook邮箱IMAP服务器设置怎么做?
Outlook邮箱IMAP服务器设置怎么做?
|
2月前
|
弹性计算 Ubuntu Linux
2024年Palworld/幻兽帕鲁服务器自建手册:详细步骤解析与设置指南
爆款游戏《幻兽帕鲁》是很多玩家在与好友开黑时的首选,因为《幻兽帕鲁》有着十分丰富的游戏内容,玩家在联机游玩《幻兽帕鲁》时能够获得非常多的快乐。 但在《幻兽帕鲁》进行联机时,是需要自行搭建服务器的,下面就带来,最新《幻兽帕鲁》服务器设置全步骤大全,方便玩家更好的进行联机游玩。 以下就是幻兽帕鲁服务器自建:幻兽帕鲁服务器设置全步骤大全的相关内容。
49 3
|
12天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
16天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程