1.無連線
2.基於訊息的資料傳輸服務
3.不可靠
4.一般情況下udp更加高效
ssize_t recvfrom(int sockfd,void *buff,size_t nbytes,int flags, struct sockaddr *from ,socklen_t *addrlen);
ssize_t sendto(int sockfd,void *buff,size_t nbytes,int flags,const struct sockaddr *to,socklen_t *addrlen);
前三個引數sockfd,buff,nbytes等同於read和write函式的三個引數:描述符,指向讀入或寫出緩衝區的指標和讀寫位元組數
flags引數暫不討論,置為0
sendto的to引數指向乙個含有資料報接收者的協議位址(例如ip位址及埠號)的套接字位址結構,其大小由addrlen指定
recvfrom的from引數指向乙個將由該函式在返回時填寫資料報傳送者的協議位址的套接字位址結構,而在該套接字位址結構
中填寫的位元組數則放在addrlen引數所指的整數中返回給呼叫者。
注意:sendto 的最後乙個引數是乙個整數值,recvfrom的最後乙個引數是乙個指向整數值的指標。
這兩個函式都是把所資料的長度作為函式返回值。
注:參考《unix網路程式設計》187頁
伺服器:
#include #include #include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0); \
void echo_srv(int sock)
; struct sockaddr_in peeraddr;
socklen_t peerlen;
int n;
while(1)
else if (n > 0)
}close(sock);
}int main(void)
客戶端:#include #include #include #include #include #include #include #include #include #include #include #define err_exit(m) \
do \
while(0); \
void echo_cli(int sock)
; char recvbuf[1024] = ;
while(fgets(sendbuf,sizeof(sendbuf),stdin) != null)
close(sock);
}int main(void)
基於TCP IP協議回射伺服器(Linux版本)
前段時間練習時重新寫了一下基於tcp ip協議的簡易回射伺服器。大致流程是 1 建立套接字,繫結服務端ip和埠 2 將套接字設定為監聽狀態 3 提取 4 讀寫 5 關閉 期間遇到一些簡單和複雜的問題,一些感覺需要注意的問題,接一下會選擇行的記錄。include include include inc...
訊號驅動IO的UDP回射伺服器
1 建立sigio的訊號處理函式。2 設定套接字的屬主,通常使用fcntl的f setown命令設定。3 開啟套接字的訊號驅動io,通常使用fcntl的f setfl命令開啟o async標誌完成。1 資料報到達套接字。2 套接字上發生了非同步錯誤 udp已經連線 1 監聽套接上的某個請求已經完成。...
基於UDP協議的伺服器 UDP伺服器建立方案
udp伺服器就是實現乙個基於udp協議的伺服器來與客戶端通訊。就是用來收發資料,進行資料處理的。與tcp伺服器不同的是不用建立連線,直接呼叫recvfrom來收包。跟tcp伺服器一樣,udp伺服器也可以通過使用 socketserver 庫很容易地被建立。先定義乙個實現 handle 特殊方法的類,...