我一直在试图解决套接字的工作原理,我一直试图挑选一些我在this page找到的示例代码来获取一个非常简单的客户端套接字程序。由于这是基本的示例代码,我认为它没有错误,但是当我尝试编译它时,我收到以下错误消息。
文件“client.py”,第4行,in client_socket.connect(('localhost',5000)) 连接中的文件“”,第1行 socket.error:[Errno 111]拒绝连接
我已经搜索了这个错误的每个部分,并且有类似问题的人似乎通过更改端口号,使用'connect'而不是'bind'以及其他一些东西得到了帮助,但它们都没有适用于我的情况。非常感谢任何帮助,因为我对网络编程很陌生,而且对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;
答案 0 :(得分:122)
这是最简单的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')
答案 1 :(得分:22)
这是一个非常简单的套接字程序。这和套接字get一样简单。
用于客户端程序(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.11替换为第二台计算机网络设置中的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()
运行服务器程序,然后运行客户端程序。
答案 2 :(得分:21)
答案 3 :(得分:4)
您的客户端似乎正在尝试连接到不存在的服务器。在shell窗口中,运行:
$ nc -l 5000
在运行Python代码之前。它将充当服务器侦听端口5000以供您连接。然后你可以在Python窗口中输入并看到它出现在另一个终端中,反之亦然。
答案 4 :(得分:3)
您可能会混淆执行中的编译。 Python没有编译步骤! :)只要您键入python myprogram.py
程序就会运行,在您的情况下,尝试连接到开放端口5000,如果没有服务器程序正在侦听,则会发出错误。听起来您熟悉两步语言,需要编译才能生成可执行文件 - 因此您会混淆Python的运行时编译“我找不到任何人在端口5000上监听!”,编译时错误。但是,事实上,你的Python代码很好;你只需要在运行之前调出一个监听器!