开始使用Python进行网络编程

时间:2014-03-31 11:34:48

标签: 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

(&#34;无法建立连接,因为目标计算机主动拒绝连接&#34;)

客户端程序收到此错误:

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

(&#34;现有连接被远程主机强制关闭&#34;)

我正在使用Python 2.7.6。我如何使这项工作?

1 个答案:

答案 0 :(得分:1)

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

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

在您的情况下,由于您在localhost上运行应用程序,因此您可能有防火墙规则阻止服务器脚本与计算机上的端口绑定。

检查应用是否正在收听:

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

netstat -ban | findstr "50007"

在Linux上:

netstat -ltnp | grep 50007 

=&GT;如果您没有看到任何返回的内容,则表示此端口上没有任何内容正在侦听。

=&GT;如果你看到了什么,请检查它是你的应用程序。

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

在Windows上,转到防火墙设置

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