Python套接字(简单服务器脚本)
我有一个简单的服务器脚本。我编写此脚本的目标是:Python套接字(简单服务器脚本),python,sockets,Python,Sockets,我有一个简单的服务器脚本。我编写此脚本的目标是: 等待客户端连接 从客户端接收消息,直到客户端断开连接 客户端断开连接后,等待另一个客户端连接 接收按摩,直到客户端断开连接 重复 我的问题是,即使当我在一对pc上测试脚本时,它似乎正在工作,但我注意到,在它收到来自客户端的连接后,即第7行 print "Connection established.. with ",address 在客户端发送任何消息之前,pythonshell窗口似乎没有响应(如果我尝试移动shell窗口,则会变得没有响
我的问题是,即使当我在一对pc上测试脚本时,它似乎正在工作,但我注意到,在它收到来自客户端的连接后,即
第7行
print "Connection established.. with ",address
在客户端发送任何消息之前,pythonshell窗口似乎没有响应(如果我尝试移动shell窗口,则会变得没有响应)
据我所知,如果没有来自客户端的传入消息,client\u socket.recv(512)
将只等待来自客户端的数据
但为什么它变得毫无反应?
为了让事情更清楚,
-脚本工作正常(它接收数据并从屏幕打印出来&如果客户端断开连接,则等待新连接)
-控制台窗口中的光标停止闪烁
-当我尝试移动console窗口时,它会失去响应,windows会给我一条消息“此程序已停止响应”基本上,您可以在此行之后的
接受调用上编写脚本块:
print "Client disconnected, Awaiting new connections..."
只有当特定客户端尝试连接到服务器时,accept
调用才会返回。此时脚本将继续执行到下一行。这就是为什么您会在Windows中看到类似“此程序没有响应”这样的消息的原因
您可以考虑使用非阻塞套接字I/O方法,以确保脚本响应。
有关阻塞和非阻塞调用的说明,请参阅链接。您还可以参考这个问题来了解如何在Python中实现非阻塞套接字——当然还有大量的web资源
希望这有帮助基本上,您可以在这一行后面的accept
调用中编写代码块:
print "Client disconnected, Awaiting new connections..."
只有当特定客户端尝试连接到服务器时,accept
调用才会返回。此时脚本将继续执行到下一行。这就是为什么您会在Windows中看到类似“此程序没有响应”这样的消息的原因
您可以考虑使用非阻塞套接字I/O方法,以确保脚本响应。
有关阻塞和非阻塞调用的说明,请参阅链接。您还可以参考这个问题来了解如何在Python中实现非阻塞套接字——当然还有大量的web资源
希望这有帮助recv
方法正在阻塞-请参阅。recv
方法正在阻塞-请参阅。