udp,即使用者資料報協議,是一種無連線的傳輸層協議。如何利用套接字實現乙個udp通訊。其套接字程式設計流程圖如下:
函式原型:
ssize_t recvfrom(int s,void *buf,size_t len,int flags,struct sockaddr *from,socklen_t *fromlen);
引數說明:
s:接收端套接字
buf:接收端緩衝區
len:接收端緩衝區長度
flags:操作標誌,通常為0。常用的值還有以下幾個:
msg_peek:返回的資料不會在系統內刪除
msg_waitall:強迫接收到len大小的資料後才返回
msg_nosignal:不會被sigpipe訊號中斷
返回值:如果函式執行成功,返回接收到的字元數。
2)sendto函式
函式原型:
ssize_t sendto(int s,const void *buf,size_t len,int flags,const struct sockaddr*to,socklen_t tolen);
引數說明:
s:連線至遠端主機的套接字
buf:傳送資料的緩衝區
len:緩衝區長度
flags:操作標誌,通常是0.常用的有如下幾個:
msg_dontwait:非阻塞傳送
msg_nosignal:不會被sigpipe訊號中斷
返回值:如果執行成功則返回傳送到的字元數
udo通訊例程:
#include #include #include #include #include #include #include #include #include #define server_port 8888
#define max_msg_size 1024
void udps_respon(int sockfd)
}int main(void)
/********服務端填充sockaddr結構********/
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*) &addr,sizeof(struct sockaddr_in))<0)
udps_respon(sockfd);
close(sockfd);
}
udp_client.c
#include #include #include #include #include #include #include #include #include #include #define server_port 8888
#define max_buf_size 1024
void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len)
}int main(int argc,int **argv)
/*****建立sockfd套接字********/
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(server_port);
if(inet_aton(argv[1],&addr.sin_addr)<0)
udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in));
close(sockfd);
}
問題描述一:關於udp與tcp之間的區別:
tcp——面向有向連線,可靠的位元組流服務。當客戶與伺服器彼此交換資料前,必須雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時延發,丟棄重複資料,檢驗資料,流量控制等功能。保證資料能從另一端傳送到另一端。
udp——面向無向連線,是一種簡單的面向資料報的傳輸層協議,udp不提供可靠性。它只是把應用層傳給ip層的資料報傳送出去即可。並不保證達到目的地。
問題描述二:關於tcp網路程式設計的連線時的「三次握手」機制,具體實現過程是什麼?
第一次握手是客戶端connect連線到server;
第二次握手是server accept client的請求之後,向client端傳送乙個訊息,相當於說我都準備好了,你連線上我了;
第三次握手就是client向server傳送的,就是對第二次握手訊息的確認。之後client和server就開始通訊了。
問題描述三:斷開連線的「四次握手」是如何實現的?
第一次握手:斷開連線的一端傳送close請求;
第二次握手:另外一端接收到斷開連線的請求之後需要對close進行確認,傳送乙個訊息;
第三次握手:傳送了確認訊息之後還要向對端傳送close訊息,要關閉對對端的連線;而在最初傳送斷開連線的一端接收到訊息之後,進入到乙個很重要的狀態time_wait狀態;
第四次握手:最初傳送斷開連線的一端接收到訊息之後。對訊息的確認;
linux網路程式設計 udp
udp udp收發 udp 協議不需要建立連線,類似於傳送簡訊,因此 udp 的程式設計方式比 tcp 更加簡單。udp 有其自己特有的接受與傳送資料的函式 socket af inet,sock dgram,0 建立socket bind socket fd,struct sockaddr ser...
Linux 網路程式設計(二)UDP程式設計
資料報通訊 對於資料報通訊的伺服器端來說,它不必再在乙個埠上偵聽,以等待建立連線,而只需生成乙個埠描述符,並且把這個埠描述符繫結到本地位址上就可以了。udp網路程式設計具體的操作流程為 使用系統呼叫socket 來獲得檔案描述符,該呼叫的宣告格式為 connect 系統呼叫由客戶端呼叫,它的用法如下...
Linux網路程式設計 UDP程式設計例項
使用udp協議通訊時伺服器端和客戶端無需建立連線,只要知道對方套接字的位址資訊,就可以傳送資料。伺服器端只需建立乙個套接字用於接收不同客戶端發來的請求,經過處理後再把結果傳送給對應的客戶端。伺服器端和客戶端使用udp的流程如下圖示 伺服器端 server.c include include incl...