我创建udp套接字以等待传入的数据包,当接收到任何数据包时-创建新的套接字,绑定到相同的地址并连接到客户端地址(来自recvfrom)。
我可以将数据发送到此套接字(客户端获取数据包),但是当客户端发送数据包时,此“已连接”套接字未获取任何数据包,但第一个套接字获取了任何数据包。
相同的代码在Unix上运行良好。
auto masterSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
setsockopt(masterSocket , SOL_SOCKET, SO_REUSEADDR, /* 1 */);
bind(masterSocket, {INADDR_ANY, 30000});
while (true) {
recvfrom(masterSocket, /* address */);
auto clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
setsockopt(clientSocket , SOL_SOCKET, SO_REUSEADDR, /* 1 */);
bind(clientSocket, {INADDR_ANY, 30000});
connect(clientSocket, /* address from recvfrom */);
send(clientSocket, /* some data */); // this works well, data is delivered to the client
int res = recv(clientSocket, /* buff */); // this stucks on windows, but returns on linux
int res = recvfrom(masterSocket, /* buff */); // this works on both windows and linux
}
这是伪代码,如果需要,我可以同时发送客户端和服务器源。 但是问题在于该程序可以在linux上按预期工作,但是在Windows“连接”的udp套接字上却没有收到传入的数据包...