Python TCP套接字不能正常工作



不久前我问过这个问题。我很惊讶没有人能给出任何答案,所以我很确定我的问题是相当罕见的。昨天,当我自我诊断这个问题时,我开始把这些点联系起来。我的Twisted TCP服务器不会工作,IDLE在启动时失败,因为"Socket错误"并返回消息:"IDLE子进程:Socket错误:无法连接,因为目标机器主动拒绝它",当我尝试运行(本地)TCP客户端连接到(本地)TCP服务器时,我得到了同样的错误。

所以我昨天得出结论,这些不仅仅是单独的问题,而是使用Python Sockets创建和运行TCP端点的更大问题。请记住,我在本地网络和本地工作上运行的UDP服务器和客户端,所以我认为这不是Socket模块作为一个整体的问题,而只是TCP方面的问题。

我电脑上的一些信息:Windows 64位,运行Python 2.7.9(出于某种原因,32位),笔记本电脑通过(内置)无线网卡连接到网络。ISP是Comcast(如果它有区别的话),路由器/调制解调器(它是一个多功能一体)是Comcast提供的TechniColor(同样,如果它有区别的话)。

我尝试过的事情:

  • 重置我的…/etc/hosts文件
  • 2个月前重新安装Python(同时试图排除故障)
  • 关闭所有防火墙(我只有一个)
  • 没有除Microsoft Security Essentials以外的杀毒软件
  • 当我仍然安装Bitdefender时,问题仍然存在,但我安装了它以确保

我还在前面提到的前面的线程上进行了一个小的故障排除会话。使用TCP套接字时,我得到的最大错误是:socket.error: [Errno 10061] No connection could be made because the target machine actively refused it .

那么,有人知道这里出了什么问题吗?谢谢。

EDIT:看起来我错过了一些东西,端口是45002,这超出了默认Windows端口的范围,我很确定没有任何东西使用它,因为我已经能够在该端口上运行UDP服务器,效果很好。该端口也是端口转发,以防万一。

您得到错误'由于目标机器主动拒绝连接,因此无法建立连接'的事实。意味着没有人正在监听您试图连接的端口。每次有人试图连接到一个没有人在监听的端口时,TCP内核都会响应一个RST,在那个IP@上,所以你实际上到达了主机,但是主机在端口上没有任何服务。

你没有忘记启动你的服务器吗?在您试图连接的服务器机器上运行netstat -a,以便它显示正在侦听的端口列表。

这种类型的错误通常发生在初始TCP SYN使用RST(重置)应答时。除非您的操作系统、socket或Twisted出了严重的问题,否则该消息一定是在线路上发生的——一定是有人发送了它,而这个人应该受到指责!:)

我的建议是在你的电脑上运行wireshark,以找出RST来自哪里。

如果它来自你的网络内部或外部的其他设备,你必须调查该设备。

如果它来自您的计算机,而您确实有一个套接字监听该地址,则责任在于您的操作系统(或某些干扰它的程序,如防火墙,防病毒或病毒)。

如果没有RST消息,则说明您的应用程序(或Twisted,或python,或您的操作系统)出了问题,您必须调查引起异常的原因(检查堆栈跟踪)。

我无法阅读完整的帖子。根据我在许多项目中为TCP服务器和客户端实现Python的经验,我可以给你一些建议。

  1. 您必须在服务器和客户端设备的防火墙上启用TCP入站规则
  2. 在服务器
  3. 中绑定套接字连接需要正确的服务器IP地址

最新更新