(非常)基本的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代码很好, 你只需要在运行之前调出一个监听器!