標籤:地址 soc nbsp 綁定 server sendto 源地址 const 用戶端
由於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:
- all: server.c client.c
- gcc -Wall client.c -o client
- gcc -Wall server.c -o server
-
- clean:
- rm -rf *.o client server
udp通訊的原理---makefile檔案