我写了一个基本程序来创建一个包含服务器和客户端的套接字 . 但问题是,当我运行代码时,它给出了一个错误,说明通常只允许使用每个套接字地址 . 所以我认为问题是由于端口,我改变了端口,它仍然无法正常工作 . 我如何让它工作?
这是我的代码:
服务器
import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('localhost',3200))
sock.listen(1)
print "Server is ready to receive data..."
client, address = sock.accept()
msg = client.recv(1024)
print msg
客户
import socket
connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connection_to_server.bind(('localhost',3200))
msg = raw_input("Please enter a content :")
connection_to_server.send(msg)
谢谢你的帮助 !
3 回答
我认为对插槽的工作方式存在根本的误解 .
socket.bind()调用用于绑定特定接口上的特定端口,该对使用网络地址指定(绑定到
127.0.0.1)
上的端口8080
. 您需要在服务器端执行此操作,然后才能开始读取传入数据,即"listening" on一个特定的套接字 . 只有服务器需要这样做 . 然后客户端将使用socket.connect连接到这个套接字 .正如评论中指出的那样,当您需要通过特定的接口/端口组合进行通信时,绑定是必要的,这对于服务器来说几乎总是必需的,但对于客户端来说并非总是如此 . 客户端和服务器都不能同时访问/绑定到同一接口上的同一端口,这样做没有多大意义 .
您的客户端和服务器都尝试开始侦听同一个套接字,这是错误消息建议的,不允许 .
您应该先进行Socket Programming HOWTO再继续 .
而不是
你应该有
对于SOCK_STREAM套接字,您的客户端应该连接,而不是绑定 . 来自Sockets HOWTO: