我有这个简单的服务器脚本。我写这个剧本的目的是:
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 ",addresspython窗口似乎没有响应(如果我试图移动shell窗口,则不会响应),直到客户端发送任何消息。
据我所知,如果没有来自客户端的传入消息,client_socket.recv(512)将只等待来自客户端的数据。
但为什么它会变得毫无反应呢?为了让事情更清楚,
-the脚本运行良好(它接收数据并从屏幕打印出来&如果客户端断开连接,则等待新连接)
控制台窗口中的-the光标停止闪烁
-when我试图移动控制台窗口,它变得没有响应能力,窗口给我一条消息:“这个程序已经停止响应”。
发布于 2013-08-30 04:29:01
基本上,您可以在这行之后出现的accept调用上编写脚本块:
print "Client disconnected, Awaiting new connections..."只有当特定客户端试图连接到服务器时,accept调用才会返回。这时,脚本将继续执行到下一行。这就是为什么您会看到像这样的消息,这个程序在Windows中没有响应。
您可以考虑使用非阻塞套接字I/O方法,以确保脚本响应。
有关阻塞和非阻塞调用的描述,请参阅这链接.此外,您还可以参考这问题来理解如何在Python中实现非阻塞套接字-当然,也有大量的web资源。
希望这能有所帮助
https://stackoverflow.com/questions/18524311
复制相似问题