首页 文章

通常只允许Python使用每个套接字地址的一种用法

提问于
浏览
0

我写了一个基本程序来创建一个包含服务器和客户端的套接字 . 但问题是,当我运行代码时,它给出了一个错误,说明通常只允许使用每个套接字地址 . 所以我认为问题是由于端口,我改变了端口,它仍然无法正常工作 . 我如何让它工作?

这是我的代码:

服务器

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 回答

  • 2

    我认为对插槽的工作方式存在根本的误解 .

    socket.bind()调用用于绑定特定接口上的特定端口,该对使用网络地址指定(绑定到 127.0.0.1) 上的端口 8080 . 您需要在服务器端执行此操作,然后才能开始读取传入数据,即"listening" on一个特定的套接字 . 只有服务器需要这样做 . 然后客户端将使用socket.connect连接到这个套接字 .

    正如评论中指出的那样,当您需要通过特定的接口/端口组合进行通信时,绑定是必要的,这对于服务器来说几乎总是必需的,但对于客户端来说并非总是如此 . 客户端和服务器都不能同时访问/绑定到同一接口上的同一端口,这样做没有多大意义 .

    您的客户端和服务器都尝试开始侦听同一个套接字,这是错误消息建议的,不允许 .

    您应该先进行Socket Programming HOWTO再继续 .

  • 0

    而不是

    > connection_to_server.bind(('localhost',3200))
    

    你应该有

    connection_to_server.connect(('localhost',3200))
    
  • 0

    对于SOCK_STREAM套接字,您的客户端应该连接,而不是绑定 . 来自Sockets HOWTO

    import socket
    connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    connection_to_server.connect(('localhost',3200))
    msg = raw_input("Please enter a content :")
    connection_to_server.send(msg)
    

相关问题