TCPIP网络编程第一章读书笔记
第一章 理解网络编程和套接字
1.1 理解网络编程和套接字
首先作者简单解释了网络编程的含义,网络编程就是使两台联网的计算机相互交换数据,这个过程首先要物理连接,这一点通过互联网已经解决,在此基础上只需要编写数据传输软件,但这部分可以通过OS中的套接字(socket)部件提供。socket应该是取插座的意思,电器连接插座就可以使用。
接下来作者依次讲解了两种套接字:
(1)TCP套接字
这种套接字由于是面向连接实现数据交换的,因此这里比喻为电话套接字。
(A)从安装电话到接电话的过程对使用的套接字接口一一介绍。
1)创建套接字——安装电话机
#include <sys/socket.h> int socket(int domain, int type, int protocal);
//成功时返回文件描述符,失败返回-1
2)分配地址信息(IP和端口)——分配电话号码
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen); //成功时返回0,失败返回-1
3)套接字转化为可接听——连接电话线
int listen(int sockfd, int backlog); //成功返回0,失败返回-1
4)接受连接请求——拿起话筒
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //成功返回文件描述符,失败返回-1
(B)构建打电话套接字
1)创建套接字——安装电话机
2)请求连接——打电话
int connect(int sockfd, struct sockaddr* serv_addr, socklen_t addrlen); //成功返回0,失败返回-1
1.2 基于Linux的文件操作
Linux系统将socket归于文件,因此在数据传输中可以使用文件IO的相关函数,而windows要区分socket和文件。
底层文件访问和文件描述符:底层定义为“与标准无关的OS独立提供的”,文件描述符是系统分配给文件包括套接字的整数,文件和套接字一般经过创建过程才会被分配文件描述符(FD)。
(1)打开文件
打开文件以读写数据的函数,第一个参数是路径名和目标文件名,第二个参数是文件打开模式
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *path, int flag); //成功返回文件描述符,失败返回-1
下表是flag的取值,如需传递多个参数,则应通过位或运算符组合传参。
(2)关闭文件
int close(int fd); //成功时返回0,失败返回-1
(3)将数据写入
ssize_t write(int fd, const void* buf, size_t nbytes); //成功时返回写入的字节数,失败时返回-1 //buf 保持要传输数据的缓冲地址值 //nbytes 要传输的字节数
size_t是typedef声明的unsigned int类型,ssize_t代表是signed的size_t,这些都是元数据类型,是为了在系统变化后只需要修改声明,不需要在代码中寻找修改数据类型。
(4)读取文件中的数据
ssize_t read(int fd, void * buf, size_t nbytes); //成功时返回接受的字节数,但遇到文件结尾返回0,失败返回-1
winsock知识略过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理