我有一个程序可以检测计算机上的键盘输入并通过 UDP 将它们发送到我的 Android 手机。然后,Android 手机接收 UDP 数据包并将每个键击记录在一个文本文件中,但这不是重点。我目前正在使用标准 Win32 API 来通过 sendto() 函数和 WSAStartup 发送数据包。但是,突然 sendto() 不断返回错误 8,根据 MSDN,这意味着 WSA_NOT_ENOUGH_MEMORY。现在我知道这意味着什么,但我不明白如何更改我的程序来修复它,考虑到我什么也没做,它只是开始这样做。重新启动我的电脑没有帮助。下面是 UDP 数据包发送函数的样子。也许你们可以帮助我。请注意,这是一个线程函数。不是 t线程根据程序员专用一定数量的内存?这可能是问题吗?
编辑:在发送数据包的 PC 上收到此错误,而不是电话。Wireshark 不会拾取离开 PC 的包装,即使它在出现此错误之前已经工作。
谢谢,
DWORD msgSender(LPVOID arg)
{
//Setup
size_t pkt_length = PACKET_LENGTH;
char pkt[PACKET_LENGTH];
sockaddr_in dest;
sockaddr_in local;
char inputAddr[] = "127.0.0.1";
char destAddr[] = "192.168.1.7";
WSACleanup();
WSADATA WsaData;
WSAStartup(MAKEWORD(2,2), &WsaData);
local.sin_family = AF_INET;
local.sin_addr.s_addr = inet_addr(inputAddr);
local.sin_port = 8081; // choose any
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(destAddr);
dest.sin_port = htons(8080);
// create the socket
s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
// bind to the local address
bind( s, (sockaddr *)&local, sizeof(local) );
while(true)
{
WaitForSingleObject(msgEvent, INFINITE);
copyToPacket(keyStr, pkt);
int ret = sendto( s, pkt, pkt_length, 0, (sockaddr*)&dest, sizeof(dest));
keyReceived = false;
}
return 1;
}
void copyToPacket(string str, char* packet)
{
for(int i = 0; i < str.length() && i < PACKET_LENGTH; i++)
{
packet[i] = str[i];
}
}