【问题标题】:Should I call the send function from WinAPI in a loop我应该循环调用 WinAPI 的发送函数吗
【发布时间】:2016-01-28 10:12:40
【问题描述】:

我应该在循环中从 WinAPI (https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms740149(v=vs.85).aspx) 调用 send 函数以保证所有数据都已发送(就像 Python 标准库中类似的 send 函数)还是像 @987654324 一样工作@函数?

【问题讨论】:

  • 您是否阅读过这部分文档? 返回值如果没有出错,send返回发送的总字节数,可以小于len参数中请求发送的字节数。否则,返回 SOCKET_ERROR 的值,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。

标签: python windows python-2.7 winapi network-programming


【解决方案1】:

Python 和 Winsock API 都实现了 BSD 套接字 API,因此 send 函数的工作方式几乎相同。所以不,这不是一个方便的sendall,而且有太多代码假设它是。

您可以在 Windows 上编写一个简单的 sendall 函数,方法是循环发送直到所有字节都已成功发送,但这在 GUI 应用程序中是一个坏主意,因为它会阻止应用程序响应用户,并且在更复杂的控制台应用程序可能会阻止其他套接字通信。

如果您担心其中任何一个问题,您应该调查WSAAsyncSelect 的 GUI 应用程序,其中您的窗口 proc 将在每次套接字准备好读取或写入时接收窗口消息,或者 select 允许控制台程序/非 gui 工作线程在最多 32 个套接字(windows 限制)的集合上循环以测试哪些是可读或可写的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2020-09-25
    • 2021-09-08
    • 1970-01-01
    • 2013-04-11
    • 2017-08-30
    • 1970-01-01
    相关资源
    最近更新 更多