Skip to content

Latest commit

 

History

History
30 lines (15 loc) · 1.18 KB

File metadata and controls

30 lines (15 loc) · 1.18 KB

这是学习Linux网络编程的一个小实验项目

内容来自:https://www.bilibili.com/video/BV11Z4y157RY?spm_id_from=333.788.videopod.episodes&vd_source=515da8d12f7385ac76420c97743dd218&p=33

编程细节:

  • 客户端从hostname到ip:gethostbyname 不是线程安全的,因为它使用静态数据存储结果。在多线程环境中,建议使用 getaddrinfo 替代。getaddrinfo 的主要作用是将主机名和服务名解析为地址信息,返回一个 struct addrinfo 链表。每个节点包含一个地址信息

  • getaddrinfo报错配合 gai_str_error 使用

TcpClient实现思路

一个对象对应一个连接

  1. 连接(提供服务端的主机名(此时默认使用http服务,连接对方的80端口),或者提供服务端的IP的端口),连接操作就是获得一个文件描述符,当向文件中写数据时就会发送出去

  2. send,调用系统的send函数,实际上是写文件

  3. recv,实际上就是读文件

  4. close,关闭文件描述符

需要注意的是各种结构体的构成,以及从结构体中获取对方地址相关的信息

TcpServer实现思路

要解决的问题

  • 能感知到用户的连接