Python网络编程入门

1 投票
1 回答
920 浏览
提问于 2025-04-18 00:39

我刚接触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)

原来的代码里用的是其他地址作为主机,我把它改成了localhost(本地地址)。第一次运行程序时被防火墙拦住了,不过我让它通过了,这之后就没问题了。

但是,这两个程序都不工作。服务器程序报了这个错:

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。请问我该怎么让它工作呢?

1 个回答

1

这个问题在这里已经被问过了:Python中的Errno 10061,我不知道该怎么办

当你在Windows上遇到网络连接问题时,可以查看一下错误号来了解情况。

在你的情况下,因为你是在本地运行应用程序,可能是防火墙的设置阻止了服务器脚本与机器上的端口连接。

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

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

netstat -ban | findstr "50007"

在Linux上:

netstat -ltnp | grep 50007 

=> 如果没有任何返回,说明这个端口上没有程序在监听。

=> 如果有返回,检查一下是不是你的应用程序。

如果是,检查一下你的防火墙规则和杀毒软件(最好在排查问题时暂时关闭所有安全软件,尤其是在测试机器上)。

在Windows上,去防火墙设置。

在Linux上,使用iptables -L -n命令,以root身份(或者用sudo)执行。

撰写回答