基於udp--通訊模型
由上圖可以看出udp通訊的步驟如下:
基於udp-伺服器
1、建立乙個socket,用函式socket();
2、繫結ip位址、埠等資訊到socket上,用函式bind();
3、迴圈接收資料,用函式recvfrom();
4、關閉網路連線;
基於udp-客戶端
1、建立乙個socket,用函式socket();
2、繫結ip位址、埠等資訊到socket上,用函式bind();
3、設定對方的ip位址和埠等屬性;
4、傳送資料,用函式sendto();
5、關閉網路連線;
示例程式如下:
服務端:
客戶端:#include #include #include #include #include #include #include #define prot_number 3333
int main(int argc, char *argv)
//填充socket資訊
struct sockaddr_in server_addr, client_addr;
server_addr.sin_family = af_inet;
server_addr.sin_port = htons(prot_number);
server_addr.sin_addr.s_addr = htonl(inaddr_any);
//繫結socket
if((bind(server_fd,(struct sockaddr *)(&server_addr),sizeof(server_addr))) == -1)
char str[1024];
while(1)
else
bzero(str,sizeof(str));
} return 0;
}
總結:1、第一次編譯時,struct sockaddr_in server_addr; 這行報錯,報錯內容為 『server_addr』的儲存大小未知。經檢查發現缺少標頭檔案arpa/inet.h。出現乙個警告:隱式宣告與內建函式『bzero』不相容 [預設啟用]。經檢查發現缺少標頭檔案string.h2、在udp通訊中,客戶端可以省略繫結操作。#include #include #include #include #include #include #include #define server_port 3333
#define send_buf 1024
int main(int argc, char *argv)
bzero(&server_addr, sizeof(struct sockaddr_in));
//填充服務端socket套結字
server_addr.sin_family = af_inet;
server_addr.sin_port = htons(server_port);
if(0 == inet_aton(argv[1],&server_addr.sin_addr))
bzero(&send_buf, send_buf);
while(1)
} return 0;
}
3、因為省略了客戶端的connect操作,所以客戶端與服務端誰先啟動都可以。(因為是無連線的,一端沒啟動,傳送訊息時另一端沒啟動的話訊息會丟失)
UDP網路程式設計
基於udp 伺服器 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.迴圈接收資料,用recvfrom 4.關閉網路連線。基於udp 客戶端 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到...
網路程式設計 UDP
網路程式設計傳輸層選擇乙個資料控制模式 tcp或者udp,前面我們已經介紹了tcp程式設計,這篇我們簡單的來看看udp程式設計。udp是無連線的不可靠的資料報服務。udp協議在ip協議上增加了復用 分用和差錯檢測功能。udp的特點 a 是無連線的。相比於tcp協議,udp協議在傳送資料前不需要建立連...
網路程式設計 UDP
一 udp協議 1 udp協議 udp與tcp一樣,都屬於運輸層協議,udp為應用層提供不可靠 無連線的 基於資料報的服務。2 udp報頭 3 udp與tcp的比較 tcp 它是一種面向連線的,可靠的,流式服務。udp 它是一種無連線的,不可靠的,資料報服務 tcp的 可靠 tcp協議使用超時重傳 ...