一.基于socket文件的IPC
网络编程采用的就是基于socket文件的通信方式
二种模型:对等模型与主客模型(CS模型)
1.对等模型
1.1.建立socket
int socket(
int domain,//地址族的类型 AF_UNIXAF_ANET
int type,//支持的数据格式:流SOCK_STREAM/报文SOCK_DGRAM,流无边界,报文有边界
int protocol);//支持的协议 0表示采用默认协议
成功返回文件描述符号
失败返回-1
1.2邦定文件/网络设备,即绑定在交换目录,也就是绑定在一个地址上,URL(Universe Resource Location)
协议://路径/文件名
file:///usr/bin/ls
http://192.168.0.72/index.php
struct sockaddr;
struct sockaddr_un;un=unix
struct sockaddr_in;in=internet
bind(int fd, 描述符号
struct sockaddr*addr, 设备地址
size_t addrlen) 地址长度
1.3发送/接收数据
read/write send/recv sendto/recvfrom
1.4关闭socket
访问socket文件:
2.1建立socket:socket
2.2连接到目标:connect
2.3发送数据:write/send/sendto
2.4关闭socket:close
二.网络
1.基础
1.1网络工具 pingipconfigifconfig
lsof netstat-a -u -t -x -t -nroute
1.2网络的基本概念
网络编程采用socket模型
网络通信本质也是进程之间的IPC,是不同主机之间。
识别主机:4字节整数:IP地址
识别进程:4字节整数:应用端口
1.3.IP地址的表示方法:计算机内部表示:4字节整数(in_addr_t)
外部表示:竖点字符串表示法("192.168.0.26")
字结构表示structin_addr
连接点:endpoint
struct sockaddr_in
{
int sin_family;
in_port_t sin_port;
struct in_addr sin_addr
}
IP地址转换
inet_addr:把字符串转换为整数 网络字节序
inet_on:把字符串转换为struct in_addr网络字节序
inet_network:把字符串转换为整数 本地字节序
inet_ntoa:把结构体转换为字符串
1.4.IP地址的意义
IP地址的位表达不同意义:
IP地址组建网络:网络标识/主机标识
1.5计算机系统中的网络配置
/ect/hosts文件 配置IP,域名,主机名
/etc/protocols文件 配置系统支持的协议
/etc/services文件 配置服务 get***by***系列函数
protoent
uname -r 获取
2.TCP/UDP编程
对等模型:AF_UNIX(AF_INET) SOCK_DGRAM0:UDP
C/S模型:AF_UNIX(AF_INET) SOCK_STREAM0:TCP
2.0网络编程
ISO的七层模型 实际的四层模型:数据链路层(物理传输),网络层(数据传输方式),传输层(数据传输的结果),应用层(数据传递的含义)
2.1.UDP编程的数据特点
UDP采用对等模型socket
send+connect=sendto
bind主要目的告诉网络发送数据的目标
recvfrom不是从指定IP接收,而是从任意IP接收数据,返回发送数据者的IP
只要知道对方的IP与PORT,就能发送数据。底层网络驱动,帮我们自动生成IP与端口。
接收方不区分发送者。
send
sendto (
int fd,//socket描述符号
void *buf,//发送的数据缓冲
size_t size,//发送的数据长度
int flags,//发送方式MSG_NOWAITMSG_OOB
const structsockaddr*addr,//发送的目标
socklen_t len)//vsockaddr_in的长度
recv
recvfrom(
int fd,
void *buf,
size_t size,
int flags,
struct sockaddr*addr,//返回发送者IP与端口
socklen_t *len);//输入返回IP的缓冲大小
2.2.TCP编程编程模型
socket 建立服务器的文件描述符号缓冲
bind 把IP地址与端口设置到文件描述符号中
listen 负责根据客户连接的不同IP端口负责,生成对应的文件描述符
accept 一旦listen有新的描述符号产生,返回,否则 阻塞。
2.3.TCP的通信特点
有连接:只要连接后,发送数据不用指定IP与端口
数据无边界:TCP是数据流,非数据报文
描述符是双工
数据准备:TCP协议可以保证数据是完全正确
TCP发送数据问题:不能认为固定长的数据,其接收一定正确,要使用MSG_WAITALL
TCP数据发送分析:基本数据int shortlongdouble
结构体数据struct 固定长度数据,建议使用MSG_WAITALL
字符串以及文件数据等不固定长度数据,制定数据包(头与体):头固定与体长度变化,在头中存放数据大小,体中存放实际数据,保证接收缓冲填满才返回。
传文件:先传递文件名,再传递数据,传递0长度的数据表示结束
3.TCP的服务器编程模型
TCP的服务器端维护多个客户的网络描述符。
对服务器多个客户描述符号同时做读操作是不可能的,需要多任务模型。
TCP多任务模型:
3.1.采用多进程
3.2.采用IO异步模型(select模型,POLL模型)
3.3.多线程
3.4.多进程池
3.5.多线程池
4.多进程应用(聊天程序)
4.1.怎样使用多进程
4.2.多进程的缺陷,解决方法
客户端:
2.1.建立socket
2.2连接服务器
2.3.创建CURSES界面
2.4.创建子进程
2.5.父进程中,输入,发送聊天信息
2.6.在子进程中,负责接收服务器传递其他客户聊天信息
服务器
建立socket
绑定地址
监听
循环接收客户连接
为客户创建子进程
在子进程接收该客户的数据,并且广播
总结:
1.TCP的四大特点
2.TCP的数据接收:固定长与变长数据接收
3.TCP的服务器多进程处理,多进程中,内存资源结构独立。
新的进程文件描述符号环境在父进程中无法访问。文件描述符不一致。