python - 处理比缓冲区大小更大的帧
问题描述
我创建了一个 UDP 通信器。如果我收到大小大于 recv() 接受的消息,那么我想处理异常:
OSError: [WinError 10040] 在数据报套接字上发送的消息大于内部消息缓冲区或其他网络限制,或者用于接收数据报的缓冲区小于数据报本身。
我怎样才能做到这一点?处理 WinError 是否安全,例如:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except WinError:
...do some job
我知道,WinError.h 是一个相当大的库,在我看来,在 try 块时,我可能会处理一些其他 WinErrors,如果系统调用它们......
解决方案
在我看来,您可能正在使用套接字。在这种情况下,如果您处理套接字错误,则不必处理特定的 OSError。您可以执行以下操作:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except socket.error, e:
#Do some job ex.
print "Error receiving data: %s" % e
sys.exit(1)
这样,套接字将引发错误,您将捕获它,同时仍然会收到与您的套接字无关的其他错误,但是 OSErrors
参考,以获得更多帮助: https ://www.networkcomputing.com/data-centers/python-network-programming-handling-socket-errors
推荐阅读
- codenameone - 代号一构建IOS:致命错误:找不到'MapContainer.h'
- registry - 如何在 C++ Builder IDE 中从 Windows 注册表中读取 REG_MULTI_SZ?
- python-3.x - 如何从文件夹上传所有 .txt 文件并使用文件夹名称进行文本分类?
- python - 将 txt 文件中的每个第三个单词分配给变量
- python - 这段代码是 O(n) 还是 O(n²)?(Python代码)
- c# - 在 Xamarin.Android 中隐藏标题栏
- c# - 从行“0”的数据源请求未知参数“0”
- sas - SAS从宽到长转置重复
- azure-web-app-service - 缩小时 Azure 应用服务重新启动
- c# - 直接使用来自 Azure Web App 的应用程序设置,而不是来自 appsettings.Production.json