C语言实现-----网络通信
网络编程就是编写程序使两台联网的计算机相互交换数据。
一 、基本原理
- 服务器端步骤:建立 socket,绑定 socket 和地址信息,开启监听,
收到请求后发送数据。 - 客户端步骤:建立 socket,连接服务器端,接收并打印服务器给
的数据。
二、流程图:
三、核心函数包含:
- socket:创建一个 socket;
- bind:用于绑定 IP 地址和端口号到 socket;
- listen: 设置能处理的最大连接要求,listen()并未开始接收连线,
- 只是设置 socket 为 listen 模式;
- accept:用来接受 socket 连接。
- connect: 该函数用于绑定之后的 client 端与服务器建立连接;
四、函数介绍
1、socket 函数(套接字)
socket 的原意是“插座”,在计算机通信领域,Socket 被翻译
为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通
过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可
以向其他计算机发送数据。
基本语法:SOCKET socket(int af, int type, int protocol);
参数说明:
af:地址族,值包含 AF_INET(IPv4)、AF_INET6(IPv6 );
type:数据传输方式/套接字类型,值包含 SOCK_STREAM(流格式套接字/面向连接的套接字)、SOCK_DGRAM(数据报套接字/无连接的套接字);
protocol:传输协议,值包含 IPPROTO_TCP(TCP 传输协议)、IPPROTO_UDP(UDP 传输协议);
2、bind 函数(绑定数据对象)
将套接字与特定的IP地址和端口绑定起来,只有这样,流经该 IP
地址和端口的数据才能交给套接字处理。
基本语法:int bind(SOCKET sock, const struct sockaddr *addr,int addrlen);
参数说明:
socket:服务器套接字对象;
addr:sockaddr 结构体变量的指针;
addrlen:为 addr 变量的大小;
3、listen 函数(监听)
让套接字进入被动监听状态。
基本语法:int listen(SOCKET socket,int backlog);
参数说明:
socket:服务器套接字对象(进入监听状态);
backlog:请求队列的最大长度;
4、accept 函数(接收)
当套接字处于监听状态时,可以通过 accept() 函数来接收客户
端请求。accpet()函数返回一个新的套接字来和客户端通信.
基本语法:SOCKET accept(SOCKET sock, struct sockaddr *addr,int *addrlen);
参数说明:
socket:服务器套接字对象;
addr:sockaddr_in 结构体变量;
addrlen: addr 的长度;
5、connect 函数(连接服务器)
将套接字与服务器端的 IP 地址和端口绑定起来建立连接。
基 本 语 法 :int connect(SOCKET sock, const struct sockaddr*servaddr, int addrlen));
参数说明:
sock:客户端套接字对象;
servaaddr:sockaddr 结构体变量的指针;
addrlen:为 addr 变量的大小;
6、send 函数(数据发送)
专门的发送数据的函数。
基本语法:int send(SOCKET sock, const char *buf, int len, int flags);
参数说明:
sock:要发送数据的套接字对象;
buf:要发送的数据的缓冲区地址;
len:为要发送的数据的字节数;
flags:为发送数据时的选项,参数值一般设置为 0 或 NULL;
7、recv 函数(数据接收)
专门的接收数据的函数。
基本语法:int recv(SOCKET sock, const char *buf, int len, int flags);
参数说明:
sock:要接收数据的套接字对象;
buf:要接收的数据的缓冲区地址;
len:为要接收的数据的字节数;
flags:为接收数据时的选项,参数值一般设置为 0 或 NULL;
8、sockaddr_in 结构体
struct sockaddr_in 结构体用来处理网络通信的地址。
基本语法:
struct sockaddr_in{
sa_family_t sin_family; //地址族(Address Family),也就是地址类型
uint16_t sin_port; //16 位的端口号
struct