4

我是 python (2.6/2.7) 的初学者,被投入到为现有 python 应用程序创建网络服务的深层次。

我已经启动并运行了一个 UDP 服务器,它工作得很好,但我正在寻求帮助,使其更加防弹。

这是我编写的基本代码,通常的标准样板:

import sys
import socket
from threading import Thread

def handleInput():
         sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
         sock.bind( ("127.0.0.1",5005) )
         # socket always binded?
         while True:
                 data, addr = sock.recvfrom(512)
                 # is 'data' usable?

t=Thread(target=handleInput)
t.daemon=True
t.start()
# can thread die?

首先,我知道套接字在某种意义上总是可用的,它不必监听,所以没有失败,你必须重新连接。这个对吗?

其次,recvfrom 返回数据的问题。检查它是否有效是一个简单 的“如果数据:那么”吗?

第三,最后,线程。一根线能炸出来吗?如果它确实重新启动它的最佳方法是什么?

欢迎任何其他提示。

(注意:我不能使用外部库,例如扭曲等)

4

1 回答 1

4

您的问题的一些答案:

  1. UDP 套接字是无连接的,因此“始终可用”。另请注意,UDP 消息长度限制为 65535 字节 IIRC。
  2. 数据只是一个字符串,其有效性将取决于使用的协议。您if data: ...将作为接收某些东西的测试,但recvfrom()无论如何调用都会阻塞,直到它接收到某些东西,所以这似乎是多余的。
  3. 一般来说,我对 python 线程的可靠性一无所知。

我还会检查SocketServer模块和相关的UDPServer类——这可能更容易实现。这SocketServer是python标准库的一部分。

于 2012-05-02T14:21:38.977 回答