UDP通信协议
UDP :不可靠傳輸協議,但是TUP數據傳輸速度很快
UDP 通信分三種模式 :單播模式,組播模式,廣播模式
UDP 單播通信的搭建步驟 :
1.創建UDP 的通信socket
參數一:網絡層協議 AF_INET IPv4 Internet protocols
參數二:傳輸層協議 SOCK_STREAM 數據流 TCP SOCK_DGRAM 數據報 UDP
參數三:屬性 默認為 0
返回值:成功返回 new socket (新的網絡通信文件描述符) 失敗 error, -1
例子: 選擇UDP協議
int socket(int domain,SOCK_DGRAM, int protocol);
2.綁定本地的網絡地址
#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);參數一:需要綁定的服務器socket
參數二:服務器的IP地址信息
參數三:服務器的IP地址信息的大小
返回值: 成功 0 失敗 -1
在UDP通信注意:一般:發送不需要綁定地址,接收者一定能夠需要綁定地址
最好:不管你是發送還是接收你都把他綁定一下。
3.進行通信 (UDP通信的重點!!!!)
接收數據:
#include <sys/types.h>#include <sys/socket.h>ssize_t recvfrom(int sockfd, //綁定好的UDP socket void *buf, //接收后的數據緩存區 size_t len, //接收數據的大小 int flags, //設置UDP 數據的傳輸方式 例如:是否阻塞 0-》阻塞struct sockaddr *src_addr, //保存發送者的IP地址信息 socklen_t *addrlen); //保存發送者的IP地址信息的大小發送數據:
#include <sys/types.h>#include <sys/socket.h>ssize_t sendto(int sockfd, //創建出來的UDP socket const void *buf, //需要發送的數據緩存區size_t len, //長度 真實長度 int flags, //發送的模式 設置0 為阻塞模式 const struct sockaddr *dest_addr, //目標的IP地址信息socklen_t addrlen);//目標的IP地址信息的大小UDP的組播設置
只有用戶加入到某一個組播地址中,只有,有人往組播地址發送數據,所有的加入者都可以接收到數據! (類似于群聊)
D類地址(組播地址)
不分網絡地址和主機地址,第1字節的前4位固定為1110
224.0.0.1 – 239.255.255.255
例如:224.10.10.10 組播地址
組播設置結構體:
struct ip_mreq{struct in_addr imr_multiaddr; //組播地址 (創建該組播所用到的地址)struct in_addr imr_interface; //本地的網卡地址 "0.0.0.0" 或 INADDR_ANY -》 讓系統自動選擇本地網卡 };加入組播的設置:
int setsockopt(int sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,const void *optval, socklen_t optlen);UDP的廣播設置
每一IP地址段的最后一個IP地址都為廣播地址,當用所有往廣播地址發送數據時,在該網絡中的所有設備都可以接收到數據。
例如:192.168.8.xxx
(2-254)
1 -> 網關
255 ->廣播地址
全局廣播地址,適用于所有網段,但不推薦使用。
255.255.255.255
總結
- 上一篇: VCL界面组件DevExpress VC
- 下一篇: 数据分析师是青春饭吗,前景如何?