udp網路程式設計
內容一、概述
二、基本udp程式設計
三、udp廣播
udp程式設計主要用到的函式 socket() bind() sendto() recvfrom() close()
一、概述
1. udp協議
udp是面向無連線的使用者資料報協議,在傳輸數前不需要先建立連線。
目地主機的運輸層收到udp報文後,不需要給出任何確認
2. udp協議與tcp協議的差異
tcpudp
是否面向連線是否
是否可靠是否
是否廣播否是
效率低高3.如何在tcp和udp之間取捨
1)廣播和多播應用必須使用udp
2)簡單的請求-應答應用程式可以使用udp
3)對於海量資料傳輸不應該使用udp
4.udp的使用場合
dns、nfs、流**傳輸等等
二、基本udp程式設計
客戶端服務端通訊例子
功能:
用於接收資料
引數:
sockfd:套接字
buf: 接收資料緩衝區
nbytes:接收資料緩衝區的大小
flags: 套接字標誌(常為0)
addrlen: from所指內容的長度
注意:
struct sockaddr *from, socklen_t *addrlen
類似於accept函式的最後兩個引數
通過from和addrlen引數存放資料**
可以為null, 表示不關心資料**
返回值:
成功:接收到的字元數
失敗: -12.ssize_t sendto(int sockfd,const void* buf, size_t nbytes,int flags,
const struct sockaddr *to,socklen_t addrlen);
功能:引數:用於傳送資料
sockfd:套接字
buf:傳送資料緩衝區
nbytes:傳送資料緩衝區的大小
flags:一般為0
addrlen:to所指向內容的長度注意:
const struct sockaddr *to,socklen_t addrlen
類似於connect函式的最後兩個引數
通過to和addrlen確定目的位址
傳送乙個0長度的udp資料報是可行的返回值:
成功:傳送的字元數
失敗: -1三、udp廣播
1. udp廣播概述1) 廣播:由一台主機向該主機所在子網內的所有主機傳送資料的方式
2) 廣播只能用udp或原始ip實現,不能用tcp
3) 廣播的用途
單個伺服器與多個客戶主機通訊時減少分組流通
址解析協議(arp)
動態主機配置協議(dhcp)
網路時間協議(ntp)2. 廣播位址
1)子網id表示由子網掩碼中1覆蓋的連續位
主機id表示由子網掩碼中0覆蓋的連續位
例如:對於192.168.220.0/24子網,192.168.220.255即為其定向廣播位址
通常路由器不**該廣播
路由器從不**該廣播
通常在dhcp等應用中把該位址當做宿主位址,因為此時客戶主機還不知道所處子網的資訊3. udp廣播的特點
處於同一子網的所有主機都必須處理資料3. udp廣播的特點udp資料報會沿協議棧向上一直到udp層
侷限於區域網內使用
處於同一子網的所有主機都必須處理資料4. 套介面選項udp資料報會沿協議棧向上一直到udp層
侷限於區域網內使用
int setsockopt(int sockfd, int level,int optname,const void *optval, socklen_t optlen);
成功執行返回0,否則返回-1
廣播例子:
#include
#include
#include
#include
#include
#include
#include
#include
intmain(
int argc,
char* argv)
if(argc >
1)else
int yes =
1;setsockopt(sockfd,sol_socket,so_broadcast,&yes,
sizeof(yes));
strcpy(buf,
"broadcast success");
int len =
sendto(sockfd,buf,
strlen(buf),
0,\ (
struct sock_addr*)&send_addr,
sizeof(send_addr));
if(len <
0)return0;
}
UDP及TCP通訊對比講解
特點 tcpudp 連線性面向連線 面向無連線 可靠性可靠 不可靠傳輸效率慢快 傳輸模式 資料流資料報 伺服器1.建立socket套接字 2.繫結套接字到ip和埠 3.監聽 listen 將套接字設定為監聽模式 4.接收連線 accept 5.傳送 接收資料 6.關閉socket套接字。客戶機1.建...
理論講解TCP 與UDP的程式設計步驟
tcp程式設計的伺服器端一般步驟是 1 建立乙個socket,用函式socket 2 設定socket屬性,用函式setsockopt 可選 3 繫結ip位址 埠等資訊到socket上,用函式bind 4 開啟監聽,用函式listen 5 接收客戶端上來的連線,用函式accept 6 收發資料,用函...
Linux基礎 UDP通訊講解和實現案例
實現案例 udp是無連線的通訊協議,準備好位址之後可以直接傳送或接收資料。ssize t sendto int sockfd,const void buf,size t len,int flags,const struct sockaddr dest addr,socklen t addrlen 功...