【问题标题】:Python Socket (Simple server script)Python Socket(简单的服务器脚本)
【发布时间】:2013-08-30 12:29:01
【问题描述】:

我有这个简单的服务器脚本。我对这个脚本的目标是:

  1. 等待客户端连接
  2. 从客户端接收消息直到客户端断开连接
  3. 一旦客户端断开连接,等待另一个客户端连接
  4. 在客户端断开连接之前接收消息
  5. 重复...

import socket

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",5000))
server_socket.listen(5)
print "Awaiting Client connection"
client_socket, address =server_socket.accept()
print "Connection established.. with ",address
while True:
    data=client_socket.recv(512)
    if not data:
        client_socket.close()
        print "Client disconnected, Awaiting new connections..."
        client_socket, address =server_socket.accept()
        print "Connection from ",address
    else:
        print "RECIEVED:",data

我的问题是,即使当我在一对 pc 上测试它时脚本似乎正在运行,我注意到它在收到来自客户端的连接后,即line no 7

print "Connection established.. with ",address

在客户端发送任何消息之前,python shell 窗口似乎没有响应(如果我尝试移动 shell 窗口,则没有响应)。

据我了解,如果没有来自客户端的传入消息,client_socket.recv(512) 将等待来自客户端的数据。

但是为什么它变得没有响应? 为了让事情更清楚,

-脚本工作正常(它接收数据并从屏幕打印出来,如果客户端断开连接,则等待新连接)

-控制台窗口中的光标停止闪烁

-当我尝试移动控制台窗口时,它变得无响应并且窗口给我一条消息“此程序已停止响应”

【问题讨论】:

标签: python sockets


【解决方案1】:

基本上,您可以在此行之后的 accept 调用上编写块:

print "Client disconnected, Awaiting new connections..."

accept 调用仅在特定客户端尝试连接到服务器时返回。那是您的脚本将继续执行到下一行的时间。这就是您会在 Windows 中看到类似此程序没有响应这样的消息的原因。

您可以考虑使用非阻塞套接字 I/O 方法,以确保您的脚本具有响应性。

有关阻塞和非阻塞调用的说明,请参阅this 链接。您也可以参考this 问题来了解如何在 Python 中实现非阻塞套接字 - 当然也有大量的网络资源。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2017-11-05
    • 2014-10-05
    • 2013-12-03
    • 2015-01-28
    • 2012-07-13
    • 1970-01-01
    相关资源
    最近更新 更多