socket常用API
// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address, socklen_t address_len);
// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address, socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockaddr结构
IPV4和IPV6的地址格式定义在netinet/in.h中,IPV4地址用sockaddr_in结构体表示,包括16位地址类型,16位端口号和32位IP地址
IPV4、IPV6的地址类型分别定义为常数AF_INET、AF_INET6.这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容
socket API可以都用struct sockaddr *类型表示,在使用的时候需要强制转换成sockaddr_in;这样的好处是程序的通用性,可以接收IPV4,IPV6,以及UNIX Domain Socket各种类型的sockaddr结构体指针作为参数
基于udp协议的socket客户端与服务端通信编程
基于tcp协议的socket客户端与服务端通信编程
tcp和udp的区别
tcp:有连接,可靠,面向字节流
udp:无连接,不可靠,面向数据报