搭建客户端和服务器,完成客户端和服务器的数据收发
TCP/IP四层协议模型和TCP通信
应用层: HTTP(超文件传输协议)、FTP(文件传输协议)、NSF(网络挂载协议)、SSH(远程登录协议)
传输层: TCP协议、UDP协议
网络层: IP协议,ICMP协议、IGMP协议(组播、广播)
物理与网络接口层: 以太网协议、ARP协议(IP -->MAC)、RARP协议(MAC–> IP)、PPP
TCP通信: 面向连接,是一种安全、可靠、有序的传输通信,保证传输数据准确无误不丢失、不失序;
TCP协议详解(史上最全)
应用场景: 用户登录相关、传输重要文件
socket编程预备知识
IP地址
IP地址
端口号
什么是端口号
套接字
本质是一个特殊的按顺序分配的最小的文件描述符;
socket
是一个编程接口
是一种特殊的文件描述符 (everything in Unix is a file)
并不仅限于TCP/IP协议
面向连接 (Transmission Control Protocol - TCP/IP)
无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX)
套接字类型:
SOCK_STREAM:流式套接字 用于TCP通信
SOCK_DGRAM:数据报套接字 用于UDP通信
SOCK_RAW:原始套接字 用于访问较低层的协议,比如网络层:IP ICMP…
字节序
数据在内存存储的方式
大端序(网络字节序):高位的数据存放在低位
小端序(主机字节序):高位的数据存放在高位
字节序转换 – 在给端口号赋值时,需要将端口号先转换成网络字节序再赋值
字节序转换相关函数:
htons(port) – 将主机字节序转换为网络字节序
ntohs(port) – 将网络字节序转换为主机字节序
基于TCP的soket通信
通信流程:
服务器:
客户端:
网络编程相关接口函数
见搭建流程
服务器的搭建
①创建套接字–socket()
②绑定本机的IP地址和端口号–bind()
③设置监听套接字–kisten()
④等待客户端连接–accept()
⑤发送、接收数据–accept()
⑥关闭套接字–close()
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#include <arpa/inet.h>
int main(int argc, char argv[])
{
/**************** 1、创建套接字 -- socket *****************/
int sockfd = socket