簡體   English   中英

C中基於UDP的聊天

[英]UDP based chat in C

我應該基於dgram用C做一個溝通者。 我不知道應將哪些參數傳遞給bind()函數。 我在StackOverflow上瀏覽了大多數UDP聊天問題和代碼,但仍然找不到關於此問題的任何特定信息。

我應該使用哪種類型的地址結構?

我可以使用哪個端口? 任何大於1024的數字?

我將套接字綁定到什么IP地址? (大多數人都放了INADDR_ANY,但這不是僅用於接收嗎?)

另外,我需要多個插座嗎? 一個用於接收,另一個用於發送消息。

我應該使用哪種類型的地址結構?

如果使用的是IPv4,請使用sockaddr_in。 如果要改用IPv6,請使用sockaddr_in6。

我可以使用哪個端口? 任何大於1024的數字?

是的,假設沒有其他程序已經使用該端口號作為其自己的UDP套接字。 (如果另一個程序正在使用您選擇的端口號,則將導致bind()失敗,並出現errno EADDRINUSE)

我將套接字綁定到什么IP地址? (大多數人都放了INADDR_ANY,但這不是僅用於接收嗎?)

通常要使用INADDR_ANY。 它告訴OS您要在任何計算機網絡接口上接收傳入的UDP數據包。 (如果只想從特定的網絡接口OTOH接收UDP數據包,例如僅在WiFi上,則可以指定該網絡接口的IP地址)

另外,我需要多個插座嗎? 一個用於接收,另一個用於發送消息。

如果需要,可以有多個套接字,但是不必那樣做。 您可以改為使用單個套接字來發送和接收UDP數據包。 一種常見的模式是使用單個套接字,將其設置為非阻塞模式,並使用諸如select()或poll()之類的方法來多路復用程序的輸入和輸出需求。 另一種模式是使用兩個線程(一個用於發送,一個用於接收),阻塞I / O,以及一個或兩個套接字(取決於您是希望兩個線程共享一個套接字,還是為每個線程分配一個線程)。自己的套接字)。 我自己更喜歡單線程/單套接字/ select()解決方案,因為我認為這是最不容易出錯的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM