《TCP IP网络编程》学习笔记一
· 阅读需 13 分钟
前言
网络编程还是很重要的,不过UNP一书过于厚重了,重点也不够突出。对比之下,尹圣雨的这本《TCP/IP网络编程》就比较简单易读。
阅读时跳过了所有Windows实现的部分,只重点阅读部分章节并敲代码,代码GitHub:linux-learn/tcpip-net
理解网络编程和套接字
服务端步骤:
第一步:调用 socket 函数创建套接字。
int socket(int domain, int type, int protocol);
第二步:调用 bind 函数分配IP地址和端口号。
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
第三步:调用 listen 函数转换为可接受请求状态。
int listen(int sockfd, int backlog);
第四步:调用 accept 函数受理套接字请求。
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
客户端步骤:
一、调用 socket 函数 和 connect 函数
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
二、与服务端共同运行以收发字符串数据
基于 Linux 的文件操作
/*
成功时返回文件描述符,失败时返回-1
path : 文件名的字符串地址
flag : 文件打开模式信息
*/
int open(const char *path, int flag);
/*
成功时返回写入的字节数 ,失败时返回 -1
fd : 显示数据传输对象的文件描述符
buf : 保存要传输数据的缓冲值地址
nbytes : 要传输数据的字节数
*/
ssize_t write(int fd, const void *buf, size_t nbytes);
/*
成功时返回接收的字节数(但遇到文件结尾则返回 0),失败时返回 -1
fd : 显示数据接收对象的文件描述符
buf : 要保存接收的数据的缓冲地址值。
nbytes : 要接收数据的最大字节数
*/
ssize_t read(int fd, void *buf, size_t nbytes);
套接字类型与协议设置
/*
成功时返回文件描述符,失败时返回-1
domain: 套接字中使用的协议族(Protocol Family)
type: 套接字数据传输的类型信息
protocol: 计算机间通信中使用的协议信息
*/
int socket(int domain, int type, int protocol);
协议族(Protocol Family)
名称 | 协议族 |
---|---|
PF_INET | IPV4 互联网协议族 |
PF_INET6 | IPV6 互联网协议族 |
PF_LOCAL | 本地通信 Unix 协议族 |
PF_PACKET | 底层套接字的协议族 |
PF_IPX | IPX Novel 协议族 |
套接字类型(Type)
面向连接的套接字(SOCK_STREAM
)
- 传输过程中数据不会消失
- 按序传输数据
- 传输的数据不存在数据边界(Boundary)
可靠地、按序传递的、基于字节的面向连接的数据传输方式的套接字。