知識內容:
1.udp通訊程式設計流程
2.套接字介面介紹
一、udp通訊程式設計
1.建立套接字
>>在核心中建立乙個socket結構體,返回乙個檔案描述符作為操作控制代碼,用於使程序與網絡卡之間建立聯絡
2.為套接字繫結位址資訊
>>在核心的socket結構體中新增描述資訊(位址資訊),告訴作業系統自己使用了哪個位址和埠,作業系統收到發往這個位址和埠的資料之後,則放入這個socket的接收緩衝區中(將這個對應的資料交給這個程序去做)
3.傳送資料資訊
>>將資料拷貝到核心中的socket傳送緩衝區中(作業系統會取出資料進行層層協議封裝,將其傳送出去)
4.接收資料
>>程序通過操作控制代碼從核心的socket接收緩衝區中取出已經接收到的資料(作業系統已經完成了傳輸層以下的資料分用)
5.關閉套接字
>>關閉套接字,釋放呼叫的資源
二、套接字介面介紹
1.建立套接字
int socket (int domain, int type, int protocol);
type:套接字型別< 流式套接字 / 資料報套接字 >
流式套接字:有序的,可靠的,雙向的,基於連線的位元組流傳輸---sock_stream
資料報套接字:無連線,不可靠,有最大長度限制的傳輸---sock_dgram
protocol:使用的協議,0---不同套接字型別下的預設協議,
流式套接字---tcp---ippoto_tcp
資料報套接字---udp---ippoto_udp
返回值:返回套接字的操作控制代碼,即檔案描述符
2.為套接字繫結位址資訊
int bind (int sockfd, strcut sockaddr* addr, socklen_t len);
sockfd:建立套接字時返回的操作控制代碼(檔案描述符)
len:位址資訊的長度
返回值:成功返回0,失敗返回-1
3.傳送資料
int sendto(int sockfd, char* data, int data_len, int flag,
struct sockaddr* dest_addr,
socklen_t addr_len);
sockfd:建立套接字時返回的操作控制代碼(檔案描述符)
data_len:要傳送資料的長度
flag:選項引數,一般預設選0,表示當前操作為阻塞操作;msg_dontwait--當前操作為非阻塞操作
若發生資料時,socket傳送緩衝區已經滿了,則0預設阻塞等待,msg_dontwait立即返回報錯
返回值:成功返回實際傳送資料的資料位元組數,失敗返回-1
4.接收資料
int revcfrom(int sockfd, char* buf, int len, int flag,
struct sockaddr* src_addr, socklen_t addr_len);
sockfd:建立套接字時返回的操作控制代碼(檔案描述符)
buf:使用者態緩衝區的首位址,用於存放接收到的資料,從核心socket,接收緩衝區中取出資料放入 這個buf使用者緩衝區中
len:使用者想要讀取的資料長度,但是不能大於buf緩衝區的長度
flag:選項引數,一般預設選0,表示當前操作為阻塞操作;msg_dontwait--當前操作為非阻塞操作
src_addr:接收到資料的傳送端位址(服務端位址),
addr_len:輸入輸出型引數,用於指定想要獲取多長的位址資訊;獲取位址之後,用於返回位址資訊 的實際長度
返回值:成功返回實際接收到資料的資料位元組長度,失敗返回-1
5.關閉套接字
int close (int fd);
UDP網路程式設計套接字
ip協議有兩個版本,乙個是ipv4,乙個是ipv6。ip位址是在ip協議中,用來標識網路中不同的主機的位址。對於ipv4來說,ip位址是乙個4位元組,32位的整數。在資料報頭部的兩個ip位址,乙個叫源ip位址,乙個叫目的ip位址 埠號port 必須是眾所周知的,並且不能隨意修改 埠號是乙個2個位元組...
UDP套接字程式設計
與面向連線的協議相比,面向無連線協議極為不同。其中乙個重要的不同點就是客戶端與伺服器之間不必建立連線。對於udp套接字程式設計而言,伺服器建立套接字後,呼叫bind 函式將套接字與準備接收資料的介面繫結在一起。和tcp程式設計不同的是,應用程式不必呼叫listen 和accept 函式等待客戶端的連...
UDP套接字程式設計
udp是使用者資料報協議,與tcp協議一樣,在網路中處理資料報,是一種無連線的傳輸層協議,具有不可靠性,udp有不提供資料報分組 組裝和不能對資料報進行排序的缺點,也就是說,當報文傳送之後,是無法得知其是否安全完整到達的。基於udp的客戶端伺服器 伺服器 include include includ...