Linux網路程式設計 使用者資料報傳送

2021-04-13 05:37:54 字數 2302 閱讀 1808

linux網路程式設計--使用者資料

我們前面已經學習網路程式的乙個很大的部分,由這個部分的知識,我們實際上可以寫出大部分的基於tcp協議的網路程式了.現在在linux下的大部分程式都是用我們上面所學的知識來寫的.我們可以去找一些源程式來參考一下.這一章,我們簡單的學習一下基於udp協議的網路程式.

5.1 兩個常用的函式

int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from int *fromlen)

int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)

sockfd,buf,len的意義和read,write一樣,分別表示套接字描述符,傳送或接收的緩衝區及大小.recvfrom負責從sockfd接收資料,如果from不是null,那麼在from裡面儲存了資訊**的情況,如果對資訊的**不感興趣,可以將from和fromlen設定為null.sendto負責向to傳送資訊.此時在to裡面儲存了收資訊方的詳細資料.

5.2 乙個例項

/* 服務端程式 server.c */

#include

#include

#include

#include

#include

#define server_port 8888

#define max_msg_size 1024

void udps_respon(int sockfd) }

int main(void)

bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=af_inet;

addr.sin_addr.s_addr=htonl(inaddr_any);

addr.sin_port=htons(server_port);

if(bind(sockfd,(struct sockaddr *)&ddr,sizeof(struct sockaddr_in))>0)

udps_respon(sockfd);

close(sockfd);

} /* 客戶端程式 */

#include

#include

#include

#include

#include

#include

#define max_buf_size 1024

void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len) }

int main(int argc,char **argv)

if((port=atoi(argv[2]))>0)

sockfd=socket(af_inet,sock_dgram,0);

if(sockfd>0)

/* 填充服務端的資料 */

bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=af_inet;

addr.sin_port=htons(port);

if(inet_aton(argv[1],&addr.sin_addr)>0)

udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in));

close(sockfd);

} ########### 編譯檔案 makefile ##########

all:server client

server:server.c

gcc -o server server.c

client:client.c

gcc -o client client.c

clean:

rm -f server

rm -f client

rm -f core

上面的例項如果大家編譯執行的話,會發現乙個小問題的. 在我機器上面,我先執行服務端,然後執行客戶端.在客戶端輸入資訊,傳送到服務端, 在服務端顯示已經收到資訊,但是客戶端沒有反映.再執行乙個客戶端,向服務端發出資訊 卻可以得到反應.我想可能是第乙個客戶端已經阻塞了.如果誰知道怎麼解決的話,請告訴我,謝謝. 由於udp協議是不保證可靠接收資料的要求,所以我們在傳送資訊的時候,系統並不能夠保證我們發出的資訊都正確無誤的到達目的地.一般的來說我們在編寫網路程式的時候都是選用tcp協議的.

使用者資料報傳輸協議

1.udp提供的服務具有以下主要特徵 1 傳輸資料前無須建立連線,乙個應用程序如果有資料報要傳送就直接傳送,屬於一種無連線的資料傳輸服務。2 不對資料報進行檢查與修改。3 無須等待對方的應答 4 正因為以上的特徵,使其具有較好的實時性,效率高。會出現分組丟失,重複,亂序,應用程式需要負責傳輸可靠性方...

網路之使用者資料報協議UDP

udp是運輸層的協議,所以呢在這要稍微提一下運輸層了。運輸層為相互通訊的應用程序提供邏輯通訊。它向高層使用者遮蔽了下面網路核心的細節 運輸層還有乙個重要的功能 復用 傳送方不同的應用程序都可以使用同乙個運輸層協議傳送資料 和分用 接收方的運輸層在剝去報文的首部後能夠把這些資料正確交付目的應用程序 u...

UDP使用者資料報頭格式

介紹 使用者資料報協議是定義用來在互連網路環境中提供包交換的計算機通訊的協議。此協議預設認為網路協議 ip 是其下層協議。此協議提供了向另一使用者程式傳送資訊的最簡便的協議機制。此協議是面向操作的,未提供提交和複製保護。如果應用程式要求可靠的資料傳送應該使用傳輸控制協議 tcp 資料報格式如下 使用...