文章目录
前言
本文主要是对 Linux 网络编程中,Server 端的模型、相关函数 以及 sockaddr、sockaddr_in 结构体做介绍。
前置知识
① 理解啥是 socket ,可参考:浅谈 Linux 网络编程 socket
② 理解 字节流转换 函数,可参考:浅谈 Linux 网络编程 - 网络字节序
Server 端核心模型 【重点】
一定要记住 server 端的套路:
①创建 socket()
②绑定 ip + port,bind()
③设置连接上限,listen()
④阻塞,监听客户端的连接,accept()
⑤业务逻辑 ,read()/write()
⑥关闭 socket,close()
以上几个步骤是固定死的,直接背下来,把"前置知识"和接下来要讲解的 函数 理解后,我们按照这个套路就能写出 Server 端的 socket 模型。
还有两个需要记住的:
- listen() 这步是用来设置 Server 端的连接上限,而不是监听来自客户端的连接,不要被名字迷惑了。
- accept() 函数才是阻塞监听来自客户端的连接。
相关函数 【重点】
socket 函数
#include <sys/socket.h>
int socket(int domain, int type, int protocol); 创建一个 套接字
domain:指定协议族或地址族,例如:AF_INET、AF_INET6、AF_UNIX
type:指定套接字的类型,例如:SOCK_STREAM、SOCK_DGRAM
SOCK_STREAM(流式套接字,提供面向连接的可靠传输)
SOCK_DGRAM(数据报套接字,提供无连接的不可靠传输)
protocol: 指定具体的协议编号,通常为0表示自动选择合适的协议。
返回值:
成功: 新套接字所对应文件描述符
失败: -1 errno
对于这个函数的参数,一般是这样的:
fd = socket (AF_INET, SOCK_STREAM, 0);
bind 函数
这个函数的第二个参数是重点,不懂的,建议先去看看本篇的【sockaddr 数据结构】章节,再回来看 bind 函数的参数传递。
#include <arp