【问题标题】:Python Server Client program error: "OSError: [WinError 10048]"Python 服务器客户端程序错误:“OSError:[WinError 10048]”
【发布时间】:2014-06-29 01:07:34
【问题描述】:

所以我正在从 Kenneth Lambert 的《Python 基础知识》一书中学习 Python,但我遇到了书中的一个程序出现错误的问题。

这里在第 10 章中讨论了客户端和服务器。我的教授要求我们用 Python 键入这些程序,看看它们是如何工作的。第一个程序运行良好,但在一个程序中我遇到了一个错误,这似乎是一个 Windows 错误而不是 Python 错误。

这是第339页的程序:

from socket import *
from time import ctime
from threading import Thread

class ClientHandler(Thread):
    """Handles a client request."""
    def __init__(self, client):
        Thread.__init__(self)
        self._client = client

    def run(self):
        self._client.send(bytes(ctime() + '\nHave a nice day!' , 'ascii'))
        self._client.close()

HOST = "localhost"
PORT = 5000
BUFSIZE = 1024
ADDRESS = (HOST, PORT)

server = socket(AF_INET, SOCK_STREAM)
server.bind(ADDRESS)
server.listen(5)

# The server now just waits for connections from clients
# and hands sockets off to client handlers
while True:
    print('Waiting for connection')
    client, address = server.accept()
    print('...connected from:', address)
    handler = ClientHandler(client)
    handler.start()

当我运行这个程序时,它会在 Shell 中显示“等待连接”消息。但是,当我尝试使用命令提示符连接到程序时,它会显示以下错误:

C:\Python33>python multi-client-server.py
Traceback (most recent call last):
  File "multi-client-server.py", line 30, in <module>
    server.bind(ADDRESS)
OSError: [WinError 10048] Only one usage of each socket address (protocol/networ
k address/port) is normally permitted

我们在课堂上没有研究过很多。所以我只是想知道为什么会发生这种情况以及如何解决它。

谢谢!

【问题讨论】:

  • 我无法重现您的问题。代码对我来说运行良好。 (我将“localhost”更改为“0.0.0.0”)
  • @pss,当我使用 PORT = 0 时,client.connect() 失败。

标签: python multithreading client-server client python-3.3


【解决方案1】:

所以,根据您的问题:

我们在课堂上没有研究过很多。所以我只是想知道为什么 发生以及如何解决它。

原因: 您正尝试在 Windows 操作系统上从两个不同的 CMD 运行相同的代码 sn-p。因此,当您最初执行代码 sn-p 时,服务器开始侦听 port number 5000,然后当您从第二个 CMD wndow 执行相同的代码 sn-p 时,它与第一个已使用的套接字冲突一。 我在 Windows 8 上对此进行了测试。

如何解决: 要解决此问题,您必须在第二次执行代码 sn-p 时简单地使用不同的端口号,以便套接字(IP+端口)不会与前一个冲突。只需编辑您的代码并输入PORT = 15200 并使用不同的名称保存此文件。(我也提供了下面的代码。)现在尝试从 CMD 窗口执行第一个代码 sn-p 文件,然后执行第二个代码 sn-您现在从第二个 CMD 窗口创建的 p 文件。问题会解决的!

代码:

from socket import *
from time import ctime
from threading import Thread

class ClientHandler(Thread):
    """Handles a client request."""
    def __init__(self, client):
        Thread.__init__(self)
        self._client = client

    def run(self):
        self._client.send(bytes(ctime() + '\nHave a nice day!' , 'ascii'))
        self._client.close()

HOST = "localhost"
PORT = 15200 # Port number was changed here
BUFSIZE = 1024
ADDRESS = (HOST, PORT)

server = socket(AF_INET, SOCK_STREAM)
server.bind(ADDRESS)
server.listen(5)

# The server now just waits for connections from clients
# and hands sockets off to client handlers
while True:
    print('Waiting for connection')
    client, address = server.accept()
    print('...connected from:', address)
    handler = ClientHandler(client)
    handler.start()

如果您愿意,请查看here 了解基本的客户端-服务器问题。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2021-01-02
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多