以下知識點來均來自steven先生所著unp卷一(version3),剛開始學習網路程式設計,如有不正確之處請大家多多指正。
需要注意的是,udp不面向連線,故不需要使用connect函式,但使用connect也是可以的,只是作用不再是三次握手建立連線,其作用表現在檢測非同步錯誤(asychronous error)和繫結目的地ip和port。
#includessize_t recvfrom(int sockfd, void* buff, size_t nbytes, int flags,
struct sockaddr* from, socklen_t* addrlen);//後兩個引數均為值-結果引數,將獲得來自發端的ip位址和及其長度
ssize_t sendto(int sockfd, const void* buff, size_t nbytes, int flags,
const struct sockaddr* to, socklen_t addrlen);//後兩個引數為指定傳送的接收端的ip位址及其長度
//上述函式均返回:若成功則為讀或寫的位元組數,若出錯則為-1
a、伺服器**如下(相對來說,比較簡單,易讀,不再作解釋!)
void dg_echo(int,sa*,socklen_t);
intmain(int argc, char **argv)
void
dg_echo(int sockfd, sa *pcliaddr, socklen_t clilen)
}
b、客戶端**如下
#includevoid dg_cli(file* fp, int sockfd, const sa* pservaddr, socklen_t servlen);
int main(int argc, char** argv)
void dg_cli(file* fp, int sockfd, const sa* pservaddr, socklen_t servlen)
}
udp是乙個不可靠不面向連線的協議,因而當傳送內容大於接收緩衝區時就會產生資料報的丟失。另,當乙個客戶的資料報丟失,此時得不到伺服器的應答,客戶將永遠阻塞於dg_cli函式中的recvfrom呼叫。此時可通過設定超時器防止客戶永久阻塞在recvfrom函式上。但此時,又無法辨別區分請求丟失和應答丟失。
此方法只針對單宿伺服器主機才起作用,多宿主機行不通,具體實現見dg_cli**
#include "unp.h"
void
dg_cli(file *fp, int sockfd, const sa *pservaddr, socklen_t servlen)
recvline[n] = 0; /* null terminate */
fputs(recvline, stdout);
}}
客戶port一次性繫結,而ip可隨資料報變動
a的ip綁在sockfd上,但資料報從b的ip介面出,則ip報文包含源a的ip,但仍可以b的ip介面出去。即所謂ip資料報將包含乙個不同於外出鏈路ip位址的源ip位址。
檢查是否存在立即可知錯誤(asyc error,非同步錯誤)
記錄對端ip和port(好處就是可以使用wirte和read代替sendto和recvfrom),但不會有三次握手過程
#include "unp.h"
intmain(int argc, char **argv)
if (fd_isset(listenfd, &rset))
close(connfd); /* parent closes connected socket */
} if (fd_isset(udpfd, &rset))
}}
UNP卷一chapter20 廣播
型別ipv4 ipv6 tcpudp 所標識介面數 遞送到介面數單播y yyy乙個 乙個任播 y 尚沒有y 一組一組中的乙個 多播可選yy 一組一組中的全體廣播y y全體全體表中要點 i 多播支援在ipv4中是可選的,在ipv6中卻是必需的 ii ipv6不支援廣播。使用廣播的任何ipv4應用程式一...
Chapter 8 理解需求
在專案起始階段,要建立基本的理解,包括存在的問題 誰需要解決方案 所期望解決方案的性質 與專案利益相關者和開發人員之間達成初步交流合作的效果。詢問客戶 使用者和其他人 系統或產品的目標是什麼,想要實現什麼,系統和產品如何滿足業務的要求,最終系統或產品如何用於日常工作。在起始和獲取階段獲得的資訊將在細...
Chapter 8 陣列的使用
一 c 一維陣列 語法 datatype arrayname size eg int nums 25 char array of name 30 double curr salary 35 二 陣列的長度可以是常量 const int n 50 int emp id n const int size...