python - Python 网络编程入门

标签 python sockets networking

我对 Python 很陌生,对网络编程更陌生。 我从 docs.python.org 中的这个示例开始:

服务器:

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()

客户:

# Echo client program
import socket

HOST = 'localhost'        # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

原始代码列出了其他一些地址作为主机,我已将其更改为 本地主机。我第一次运行这些程序时,它们被防火墙阻止了, 但我让它破例,从那以后这就不再是问题了。

但是,这两个程序都不起作用。服务器程序收到此错误:

Traceback (most recent call last):
  File "C:\Users\Python\echoclient.py", line 7, in <module>
    s.connect((HOST, PORT))
  File "C:\Python27\lib\socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 10061] Det gick inte att göra en anslutning eftersom måldatorn aktivt nekade det

(“无法建立连接,因为目标计算机主动拒绝”)

客户端程序收到此错误:

Traceback (most recent call last
File "C:\Users\Python\echoclient.py", line 9, in <module> data = s.recv(1024)
error: [Errno 10054] En befintlig anslutning tvingades att stänga av fjärrvärddatorn

(“现有连接被远程主机强制关闭”)

我使用的是Python 2.7.6。我怎样才能做到这一点?

最佳答案

此处已提出问题:Errno 10061 in python, I don't know what do to

当您在 Windows 上遇到网络连接问题时,请检查 Errno number来理解。

就您而言,由于您在本地主机上运行应用程序,因此可能有防火墙规则阻止服务器脚本与计算机上的端口绑定(bind)。

检查应用程序是否正在监听:

在 Windows 上,打开 cmd 提示符(以管理员身份运行):

netstat -ban | findstr "50007"

在 Linux 上:

netstat -ltnp | grep 50007 

=> 如果您没有看到任何返回的内容,则意味着此端口上没有任何内容正在监听。

=> 如果您看到某些内容,请检查它是否是您的应用。

如果是这样,请检查您的防火墙规则、防病毒软件(如果您正在排除故障并且它是测试机器,最好禁用所有安全)

在 Windows 上,转到防火墙设置

在 Linux 上,iptables -L -n 作为 root(或 sudo)

关于python - Python 网络编程入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22760511/

相关文章:

linux - 为什么 Ping 间隔会影响 RTT 值?

networking - Rust 中的 UDP API

python - 具有多个 request.session 的 grequests 池?

python - 使用 sqlalchemy 类型的数据框 to_sql 的无符号整数

Java TCP Socket发送字节数组

ruby - 如何让本地代理服务器将 html 返回到浏览器?

c - 我是否必须在伪造的数据包中输入 src 和 dst mac 地址?

python - 如何使 Python 库在 PYTHONPATH 中可访问?

python - 无法将JupyterLab升级到最新版本

docker - 从 docker 容器内部访问 vagrant 虚拟机