【问题标题】:python socket: winerror 10056python套接字:winerror 10056
【发布时间】:2013-05-14 19:15:42
【问题描述】:

我已通读此 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] 连接尝试针对已连接的套接字。

我该如何解决这个错误?服务器稍作调整,但客户端是教程中的确切代码。而且这个错误看起来很奇怪,毕竟我希望套接字已经与服务器连接。起初我以为已经有套接字连接到我的服务器,但重新启动它并再次输入客户端代码会导致相同的结果。

【问题讨论】:

  • 我发现一行重复,可能这个重复的行是你的问题:serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  • 感谢您的帮助。可悲的是问题仍然存在
  • 操作系统以不想关闭套接字而闻名,直到他们确定使用它们的任何事情都已真正完成。将代码放入其中将确保它们在两侧正确关闭。即使应用程序崩溃。

标签: python windows sockets


【解决方案1】:

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

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()

【讨论】:

    【解决方案2】:

    你不想在你调用listen()和accept()的socket上调用recv()。请改用新连接的客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2020-03-06
      • 1970-01-01
      • 2019-09-04
      • 2021-07-16
      相关资源
      最近更新 更多