c++ - UDP 客户端/服务器发送数据但无法读取

标签 c++ sockets winsock

我正在尝试通过 LAN 从一个应用程序向另一个应用程序发送数据,我可以发送数据(sendto 返回预期的字节数)但我无法读取数据。我知道这是因为我正在使用 select 来测试读取操作并且它返回 false。下面是用于创建客户端和服务器的代码:

创建套接字

sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

绑定(bind)到一个端口:

addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_ANY;

bind(sock_fd, (struct sockaddr*)&addr, sizeof(sockaddr));

将数据发送到我使用的另一台机器:

o_addr.sin_family = family;
o_addr.sin_port = port;
o_addr.sin_addr.s_addr = inet_addr("other_side_ip_address_here");
uint32 sent;    

sent = sendto(sock_fd, data, length, 0, (struct sockaddr*)&o_addr, sizeof(struct sockaddr))

从我使用的另一台机器读取数据:

struct sockaddr_in o_addr;
uint32 read;
int l = sizeof(struct sockaddr);
read = recvfrom(sock_fd, data, length, 0, (struct sockaddr*)&o_addr, &l)

并测试是否有一些数据可供读取,我使用:

int r;
struct timeval tv = { 0, 0 };
fd_set fds;

FD_ZERO(&fds);
FD_SET(sock, &fds);

r = select(sock + 1, &fds, NULL, NULL, &tv);

if (FD_ISSET(sock, &fds))
    return true;
return false;

套接字处于 block 模式,测试在两台机器上进行。 感谢关注

最佳答案

我的猜测是对接收套接字的 bind 调用由于某种原因失败了。尝试添加一些错误检查。

关于c++ - UDP 客户端/服务器发送数据但无法读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473336/

相关文章:

c++ - 将 std::string 转换为 char 数组

java - 设置套接字接收超时

c++ - 修改大型动态大小的 3D 数组 mex/C++

c++ - 立即传递其成员时的右值范围

c++ - 在 C/C++ 中存储 PCRE 编译的正则表达式

C 在不定义套接字的情况下发送套接字

node.js - 无法连接安全的 websocket

delphi - inet_addr 对于 localhost 返回 -1

c++ - Windows API : Undefined reference to DisconnectEx

c++ - 推荐的配置/偏好处理方法