(非常)基本的Python客户端套接字示例

我一直试图围绕套接字如何工作,我一直试图挑选一些我在这个页面find的示例代码,用于一个非常简单的客户套接字程序。 由于这是基本的示例代码,我认为它没有错误,但是当我尝试编译它时,出现以下错误消息。

文件“client.py”,第4行,在client_socket.connect(('localhost',5000))文件“”,第1行,在连接socket.error:[Errno 111]连接被拒绝

我几乎把这个错误的每一个部分都search了一遍,有类似问题的人似乎已经通过改变端口号,使用“连接”而不是“绑定”等一些东西来帮助,但没有一个他们适用于我的情况。 任何帮助非常感谢,因为我是非常新的networking编程和相当新的python。

顺便说一句,这里是代码,以防万一,链接不能出于任何原因。

#client example import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 5000)) while 1: data = client_socket.recv(512) if ( data == 'q' or data == 'Q'): client_socket.close() break; else: print "RECIEVED:" , data data = raw_input ( "SEND( TYPE q or Q to Quit):" ) if (data <> 'Q' and data <> 'q'): client_socket.send(data) else: client_socket.send(data) client_socket.close() break; 

它试图连接到在端口5000上运行的计算机,但连接被拒绝。 你确定你有一个服务器运行?

如果没有,您可以使用netcat进行testing:

 nc -l -k -p 5000 

某些实现可能要求您省略-p标志。

这是最简单的python套接字示例。

服务器端:

 import socket serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serversocket.bind(('localhost', 8089)) serversocket.listen(5) # become a server socket, maximum 5 connections while True: connection, address = serversocket.accept() buf = connection.recv(64) if len(buf) > 0: print buf break 

客户端:

 import socket clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsocket.connect(('localhost', 8089)) clientsocket.send('hello') 
  • 首先运行SocketServer.py,并确保服务器准备好收听/接收某物
  • 然后客户端发送信息给服务器;
  • 服务器收到某物后,终止

这是一个非常简单的套接字程序。 这与套接字一样简单。

对于客户端程序(CPU 1)

 import socket s = socket.socket() host = '111.111.0.11' # needs to be in quote port = 1247 s.connect((host, port)) print s.recv(1024) inpt = raw_input('type anything and click enter... ') s.send(inpt) print "the message has been sent" 

您必须将第4行中的111.111.0.11replace为第二台计算机networking设置中find的IP号码。

对于服务器程序(CPU 2)

 import socket s = socket.socket() host = socket.gethostname() port = 1247 s.bind((host,port)) s.listen(5) while True: c, addr = s.accept() print("Connection accepted from " + repr(addr[1])) c.send("Server approved connection\n") print repr(addr[1]) + ": " + c.recv(1026) c.close() 

运行服务器程序,然后运行客户端程序。

它看起来像你的客户端试图连接到一个不存在的服务器。 在shell窗口中,运行:

 $ nc -l 5000 

在运行你的Python代码之前。 它将充当侦听端口5000的服务器,供您连接。 然后,你可以打字到你的Python窗口,看到它出现在另一个terminal,反之亦然。

你可能会混淆编译执行。 Python没有编译步骤! :)只要你键入python myprogram.py程序运行,在你的情况下,尝试连接到一个开放的端口5000,如果没有服务器程序正在监听那里给出错误。 这听起来像你熟悉的两步语言,需要编译生成一个可执行文件 – 因此,你的Python运行时编译“编译时错误,我找不到任何人在端口5000上听!”混淆。 但是,实际上,你的Python代码很好, 你只需要在运行之前调出一个监听器!