一、OSI开放系统互连参考模型
1.七层模型
物理层--数据链路层--网络层--传输层--会话层--表示层--应用层
2.四层模型
网络接口层--网络层--传输层--应用层
3.五层模型
物理层--数据链路层--网络层--传输层--应用层
二、socket
专门用来进程网络通信的文件
三、TCP协议
特点:
1)面向连接:通信之前,建立好连接
2)可靠连接(无丢失、无失序、无差错、无重复)
3)字节流传输
四、UDP协议
1)无连接
2)不可靠
3)数据报传输
五、TCP通信模型

六、客户端
1.int socket(int domain, int type, int protocol);
@domain:通信域(本地--AF_UNIX/AF_LOCAL,IPV4--AF_INET,IPV6--AF_INET6);
@type:SOCK_STREAM--流式套接字,SOCK_DGRAM--数据报套接字;
@protocol:协议(tcp,udp,0是默认协议);
返回值:
成功返回socket的文件描述符;失败返回-1&&errno会被设置
2.int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
@sockfd:要连接的文件
@:要通信的服务器地址(IP+端口号),找到一台主机以及这台主机上的进程
@:由sockefd决定,表示addr参数地址的大小
3.bzero(&seraddr,sizeof(seraddr));
清空目标,清空的大小
4.实际用的结构体是struck sockaddr_in
5.htons
将端口号的字节序转为网络字节序
6.inet_addr
将IP的字节序转为网络字节序
cpp
int client_connect(void)
{
int fd = socket(AF_INET,SOCK_STREAM,0);
if(fd < 0)
{
perror("socket fail");
return -1;
}
printf("fd = %d\n",fd);
struct sockaddr_in seraddr;
bzero(&seraddr,sizeof(seraddr));
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(50000);
seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if(connect(fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
{
perror("connect fail");
return -1;
}
return fd;
}