python 套接字 : winerror 10056

标签 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 (most recent call last): File "", line 1, in s.connect(("localhost",8000)) OSError: [WinError 10056] A connection attempt targeted an already connected socket.

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

最佳答案

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

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

关于 python 套接字 : winerror 10056,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16551062/

相关文章:

python : No module named 'flask'

python - 无法在linux中安装python3.3的请求

c++ - 如何使用户可变常量?

c - 为 Unix 和 Windows 编写应用程序

python socket.error : [Errno 9] Bad file descriptor

c++ - 更小超时值的 epoll 性能

python - 在 kivy 文本输入中检测点击/触摸

python - networkx 中可用的属性列表

windows - 如何在自动化中验证音频/视频流

c - 使用本地主机 53 或给定 dns 服务器上的套接字发送反向 dns 请求