Win2003闹鬼,Socket可以同时打开两个相同的端口

ZyxIp 2010-12-18 03:11:02
一台 HP 1U的服务器,托管在机房。用DELPHI写了一个SOCKET的程序 A,TServerSocket 打开了8080端口监听。
我的客户端1,客户端2,客户端3去连接,发送数据,断开都正常。

另外还有一个叫:网络调试助手 的软件,用 TCP服务器端的模式启动,也打开8080端口,竟然也都可以打开。

然后在启动我的客户端4,客户端5,客户端6,也可以连接,但是都连接到 网络调试助手 这个软件了。


这时 客户端1,客户端2,客户端3 还是可以和我写的服务器端进行连接,收发数据。

客户端4,客户端5,客户端6 也同时可以和 网络调试助手 收发数据。
它们尽然都是用的8080端口。真是见鬼了。谁知道是怎么回事啊????????

用其它的端口也一样,两个软件都可以打开。

如果同进启动我的两个服务器端,就不能都打开同一个端口。
同时启动两个 网络调试助手 软件,也不能都打开同一个端口。

在我的机子上XP下,网络调试助手 和 我的服务器 程序就不可以同时打开相同的端口.
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZyxIp 2010-12-18
  • 打赏
  • 举报
回复
问题解决了。是端口复用的问题。
在 ScktComp.pas 单元中做了修改。
Const
SO_EXCLUSIVEADDRUSE=Not SO_REUSEADDR;

procedure TCustomWinSocket.DoListen(QueueSize: Integer);
添加
val:Boolean; val:=True;
setsockopt(FSocket,SOL_SOCKET,SO_EXCLUSIVEADDRUSE,PChar(@val),sizeof(val))

默认 是SO_REUSEADDR可以复用。使用 SO_EXCLUSIVEADDRUSE是独占.


keeley20 2010-12-18
  • 打赏
  • 举报
回复
端口复用? 一个网络调试助手也需要用到端口复用?楼主可以先开网络调试助手 ,后开Socket程序;然后 先开Socket程序,再开网络调试助手,看看两种启动顺序是不是还是都可以监听。
lyhoo163 2010-12-18
  • 打赏
  • 举报
回复
共用8080端口。
ZyxIp 2010-12-18
  • 打赏
  • 举报
回复
我觉得是 网络调试助手 这个软件从更底层的方式复用了端口。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧