Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字(简单服务器脚本)_Python_Sockets - Fatal编程技术网

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
    方法正在阻塞-请参阅。