今天我們介紹如何編寫Linux下的UDP程序,關於TCP程序可以參考這裡:http://www.linuxidc.com/Linux/2012-06/61802.htm
由於UDP通信不需要事先建立連接,因此不需要TCP中的connect函數。
服務器端的步驟如下:
1. socket: 建立一個socket
2. bind: 將這個socket綁定在某個端口上(AF_INET)
3. recvfrom: 如果沒有客戶端發起請求,則會阻塞在這個函數裡
4. close: 通信完成後關閉socket
客戶端的步驟如下:
1. socket: 建立一個socket
2. sendto: 相服務器的某個端口發起請求(AF_INET)
3. close: 通信完成後關閉socket
可以看到,和TCP相比,步驟少了一些。
這裡我們用到了兩個新的函數:
int recvfrom(int sockfd, void * buf, size_t len, int flags, struct sockaddr * src_addr, socklen_t * addrlen);
int sendto(int sockfd, const void * buf, size_t len, int flags, const struct sockaddr * dest_addr, socklen_t addrlen);
recvfrom用於接收數據,sendto用於發送數據
recvfrom:
socket:socket套接字
buf:接收到的數據的存放位置
flags:一般情況下為0
src_addr:接收的源地址
addrlen:地址長度
sendto:
socket:socket套接字
buf:要發送的數據的起始地址
flags:一般情況下為0
dest_addr:發送到的目的地址
addrlen:地址長度
還是先上代碼:
Makefile: