【问题标题】:Socket server not accepting clients from other computers (connect failed: 10060)套接字服务器不接受来自其他计算机的客户端(连接失败:10060)
【发布时间】:2011-12-17 23:17:31
【问题描述】:

我正在尝试使用this c socket class,但它仅在我自己的计算机上使用时才有效。

仅限桌面

服务器是这样启动的:cSocketServer -p:2030 -i:192.168.178.22

客户端连接:cSocketclient -p:2030 -s:192.168.178.22

工作正常。

桌面服务器、笔记本电脑客户端

服务器:cSocketServer -p:2030 -i:192.168.178.22

客户:cSocketclient -p:2030 -s:192.168.178.22

与上面完全相同,但这会引发connect failed: 10060 错误。这基本上意味着它超时了。

仅限桌面(外部地址)

服务器:cSocketServer -p:2030 -i:192.168.178.22

客户:cSocketclient -p:2030 -s:xx.xx.xx.xx

其中 xx.xx.xx.xx 是我的外部 IP 地址。

同样的错误:connect failed: 10060。端口 2030 绝对是开放且可访问的,因为我使用一些不相关的应用程序对其进行了测试,这些应用程序允许用户选择自己的端口(如 utorrent)。当它们运行时,whatismyip.org 表示端口 2030 已打开。但是当我运行 my 应用程序时,它说它超时。这些应用程序在防火墙中没有任何特殊权限。

但即使我确实弄乱了一些防火墙/路由器设置(我很确定我没有这样做),也无法解释为什么我无法从本地网络连接到服务器。其他服务(例如文件共享)工作正常,因此两台计算机之间肯定存在连接。

客户端和服务器都在 Windows 7 64 位上运行。

;出于某种原因,每个连接的客户端都分配了自己的入站端口或其他什么?这正常吗?当客户端连接服务器状态时;

Accepted client: 192.168.178.22:55156
Accepted client: 192.168.178.22:55164
Accepted client: 192.168.178.22:55176

这是怎么回事?

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    如果两个 TCP 连接具有相同的源 IP、目标 IP、源端口和目标端口,则无法区分它们。为了确保它们在某个地方有所不同,客户端通常会为他们建立的每个出站连接分配一个唯一的源端口。

    至于错误,您确实需要进行一些故障排除。监听套接字是否显示在“netstat”中?关闭防火墙后是否遇到同样的问题?服务器和客户端是否在同一个 LAN 上(对于内部地址情况)?端口转发是否已启用并在路由器中工作(对于外部地址情况)?

    我敢打赌,外部地址大小写不起作用,因为您尚未配置路由器转发的端口,或者您的路由器不支持发夹(本地访问外部 IP)。其他程序可能会工作,因为它们支持 UPnP 或不依赖发夹(所有对外部 IP 的访问都来自您的 LAN 外部)。

    我没有立即解释为什么您的台式机到笔记本电脑无法在您的 LAN 中工作。您确定两台计算机在同一个局域网中吗?他们可以ping彼此吗?

    【讨论】:

    • 两台电脑肯定在同一个局域网,可以ping通就好了。路由器中的端口转发已正确设置并适用于其他应用程序,例如 WAMP。发夹不应阻止 whatismyip.org 将端口视为打开的,但我尝试通过代理连接以确保结果相同。只要连接了至少 1 个客户端,服务器上的 Netstat 就会列出 2030。防火墙关闭没有什么区别。这很奇怪。
    • 您的网络出现了问题。您的桌面 - 桌面场景显示套接字本身正常工作,失败的是网络场景。您的路由器要么配置错误,要么完全损坏。尝试检查路由器的日志是否有错误。您也可以尝试使用 Wireshark 观察网络上的 TCP/IP 流量,以确保数据包被正确路由。
    • Wireshark(在桌面上)在使用 LAN 地址连接笔记本电脑->桌面时报告 this。和this 连接到我的外部IP 时。你们有什么奇怪的事情吗?另外,每次我连接外部wireshark sais fuscriptresacommunity 而不是x9-icue。我认为每次都会有所不同。
    • 笔记本电脑手动从路由器申请本地 IP 地址,而不是让 DHCP 处理它,我禁用了它,现在笔记本电脑已自动分配 IP 地址 192.168.178.19 一切正常,包括外部访问。我根本不明白,是否有可能手动声明地址搞砸了我的路由器?因为那不应该是个问题,当然也不应该影响我的台式电脑。
    • 这取决于路由器。如果客户端手动为自己分配路由器 DHCP 范围内的 IP 地址,则某些路由器不喜欢它。
    【解决方案2】:

    去掉服务器的 -i 参数,或者指定 0.0.0.0 并修复代码,这样就不会被认为是错误,这本身就是一个错误。

    【讨论】:

    • 我指定了 0.0.0.0 ,但这并没有改变任何东西。 desktop->desktop 很好,laptop->desktop 仍然超时。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多