我這裏有以下問題:我想寫一個特定端口的UDP套接字服務器流式數據,以及客戶端應該能夠連接到它,並接收被髮送出去,沒有太多的數據非常麻煩:他們只是連接,從他們開始的那一刻起,他們應該從服務器使用recvfrom
獲取數據。流的UDP
我有一些問題設置網絡相關的部分。所以,這裏是一個粗略的一段代碼,我儘量讓工作:
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變量,它是使用正確獲得,它是有效的。我很困擾關於sendto
方法的參數化,becasue對現在的應用程序的輸出是:
sendto failure: Destination address required
這是真的,因爲我沒有目標地址,因爲所有的例子,我發現到現在顯示服務器何時獲得客戶端連接,並且有地址。但由於我還沒有客戶端連接,我仍然想流出。
我感謝所有幫助,我不知道是什麼Ishould把爲SENDTO的參數:
- 的gOutgoingAddress這是我創建套接字的地址?我試過這個,但是如果我在指定的端口上使用
tcpdump
linux命令,我什麼也得不到。 - 我應該創建一個組播套接字?這在某種程度上是沒有意義的...
- 別的東西嗎?
感謝, FRC
多播由許多(如果不是大多數)現代路由器支持。互聯網服務提供商可能不支持它。例如,見[BBC,Virgin Radio,EMAP和GCAP已經開始通過多播傳送他們的無線電](http://www.bbc.co.uk/multicast/radio/index.shtml)。 –
我的回答並不是指骨幹互聯網路由器。我指的是您在家庭和小型辦公網絡中找到的典型設備,它們沒有IPv4多播支持,除此之外它還沒有第2層(以太網)多播支持,而是使用廣播來代替多播地址。 – Mecki