本章还是实现了Echo Service,不过是基于UDP 实现的。
1. UDP(User Datagram Protocol, 用户数据包协议)
它主要完成了两件事:
- 在IP地址的基础上添加了端口信息;
- 检测数据在传送后的损坏情况(data corruption),如有损坏则丢弃。
相比于TCP:
- UDP不需要在使用前先建立连接,但是需要指定每一个数据包的目的地址;
- 同时UDP还相较于TCP保留了信息边界(message boundaries);
- UDP是尽力而为型的(bets effort)。
2. UDP Client/Server
使用UDP不需要调用connect()
方法;并且它利用sendto()
以及recvfrom()
来代替send()
和recv()
。并且由于UDP保存信息边界,所以它只需要调用接收方法一次即可。
ssize_t sendto(int socket, const void *msg, size_t msgLength, int flags,
const struct sockaddr *destAddr, socklen_t addrLen);
/*
* 这里请注意addrLen是一个指针类型
*/
ssize_t recvfrom(int socket, void *msg, size_t msgLength, int flags,
struct sockaddr *srcAddr, socklen_t *addrLen);
这个程序使用了Practical.h、AddressUtility.c、DieWithMessage.c、UDPEchoClient、UDPEchoServer
3. UDP使用connect()
UDP也可以使用connect()
,这样收发数据就可以简单的使用send()
和recv()
了。