客户端-服务器编程:客户端请求和发送数据服务器,服务器返回给客户端
客户端和服务器连接通过网络,网络分为局域网(集线器相互链接),还有广域网,通过路由器相连,同一个网络下集线器就可以,如果两个网络不在同一个网络下,那需要通过路由器关联。各个客户端操作系统他们的网络都不是一样的和需要兼容的,这时候就需要适配器,来转换到相同的格式。
全球IP因特网,通过TCP/IP和网络适配器,把各地电脑相连,可以相互访问。域名:根域名->一级域名(.com .org .net 等)->二级域名(aixuexi)->三级域名(www等),域名跟ip向映射
因特网连接 ip地址+端口 通过套接字来连接
getaddinfo:服务名或者主机名转化为套接字结构地址
getnameinfo:将套接字结构转化为相应的主机名和服务名
客户端:
getaddinfo:服务名或者主机名转化为套接字结构地址
socket 创建套接字链接符
conncet:连接服务器
服务器:
getaddinfo:服务名或者主机名转化为套接字结构地址
Socket 创建套接字链接符
Bind 绑定
listen:监听
accept:接受
WEB服务器:处理请求,分为静态请求和动态请求。静态请求,直接通过域名+默认端口找到对应服务器,然后在服务器上找到相对目录中的文件,通过超文本协议http,超文本文件:html,然后把文件通过浏览器解析出来并展示,参数:通过?分割主机名和参数 和&分割参数
动态请求:所有的请求都转到CGI(通用网关服务)上,有几个环境变量可以接收参数等其他.请求到服务器 服务器fork子进程,重定向客户端套接字文件描述符 并调用执行函数在CGI上执行请求地址(www.baidu.com/cgi/path)中的/cgi/path
Tiny Web服务器:监听套接字监听客户端请求,然后接受请求,处理请求头,处理请求地址,判断是静态还是动态地址,并拼接请求文件地址,返回动静标示,并判断文件是否存在,不存在直接返回错误给客户端, 如果是静态地址,并判断改地址文件是否有读权限,没有直接返回错误, 如果有权限,直接把响应头输出到链接字符上,然后客户端展示。如果是动态连接,直接fork子进程,在子进程执行(设置环境变量、重定向到连接标字符,执行动态文件,动态文件输出内容直接输出到已链接套接字上,返回给客户端