【发布时间】:2011-09-05 12:48:41
【问题描述】:
我在这里遇到以下问题:我想在特定端口上的 UDP 套接字上编写服务器流数据,并且客户端应该能够连接到它并接收发送出去的数据,而不会有太多麻烦:他们只是连接,从一开始他们就应该使用recvfrom从服务器获取数据。
我在设置网络相关部分时遇到了一些问题。因此,这是我尝试编写的一段粗略代码:
int udpSock = socket(AF_INET, SOCK_DGRAM, 0);
if(udpSock == -1)
{
perror("Could not create audio output socket");
exit(1);
}
struct sockaddr_in *sin = (struct sockaddr_in*)&gOutgoingAddr;
sin->sin_port = htons(40200);
if(bind(udpSock, (const sockaddr*)sin, sizeof(struct sockaddr_in)) == -1)
{
perror("Cannot bind audio socket");
exit(1);
}
int buffer_size = 0;
char* data = get_next_buffer(&buffer_size);
while(buffer_size > 0)
{
if(sendto(udpSock, (const void*)(data), buffer_size, 0, NULL, 0) == -1)
{
perror("sendto failure");
}
data = get_next_buffer(&buffer_size);
}
不用担心gOutgoingAddr变量,使用getifaddrs正确获取,有效。我对sendto 方法的参数化感到困扰,因为现在应用程序的输出是:
sendto failure: Destination address required
确实如此,因为我没有目标地址,因为到目前为止我发现的所有示例都显示了服务器何时获得客户端连接,并且有地址。但是由于我还没有连接客户端,所以我仍然想流式传输。
感谢所有帮助,我不知道应该为 sendto 的参数添加什么:
- gOutgoingAddress 是我创建套接字的地址?我已经尝试过了,但是如果我在指定端口上使用
tcpdumplinux 命令,我什么也得不到。 - 我应该创建一个多播套接字吗?这不知何故没有意义......
- 还有别的吗?
谢谢, frc
【问题讨论】:
标签: c networking streaming udp posix