python socket:winerror 10056

时间:2013-05-14 19:15:42

标签: python windows sockets

我已经阅读了python套接字的介绍: http://docs.python.org/3.3/howto/sockets.html

这是我的服务器

import socket
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversocket.bind(("localhost",8000))
serversocket.listen(5)
while True:
    (client,addr)=serversocket.accept()
    data=serversocket.recv(1024)
    print(data.decode("utf-8"))

这是客户端

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost",8000))

这个想法是服务器只打印从客户端发送的所有数据。如您所见,我打算使用utf-8将消息字符串编码为字节。但我从未走得那么远。

在服务器脚本运行的情况下,我将客户端行逐个输入到IDLE python shell中。在第三行之后,这个错误提示了。由于我是德国人,这是一个模糊的翻译。如果您可以重现错误

,则错误消息可能听起来不同
  

Traceback(最近一次调用最后一次):文件“”,第1行,in          s.connect((“localhost”,8000))OSError:[WinError 10056]连接尝试针对已连接的套接字。

如何解决此错误?服务器稍微适应,但客户端是教程中的确切代码。并且错误看起来相当奇怪,毕竟我希望套接字已经连接 - 与服务器。起初我以为不知何故已经有套接字连接到我的服务器但重新启动它并再次输入客户端代码会导致相同的结果。

2 个答案:

答案 0 :(得分:2)

您希望在客户端套接字上接收,并在客户端关闭时关闭客户端套接字。这将一次处理一个客户端,但请注意,它确实需要实现一个消息协议才能知道它有一个完整的消息要解码:

import socket
serversocket = socket.socket()
serversocket.bind(('',8000))
serversocket.listen(5)
while True:
    client,addr = serversocket.accept()
    while True:
        data = client.recv(1024)
        if not data: break
        print(data.decode('utf8')) # Note this might not contain a complete UTF-8 character.
    client.close()

答案 1 :(得分:1)

您不希望在调用listen()和accept()的套接字上调用recv()。请改用新连接的客户端。

相关问题