回顾:
多进程的问题:数据共享。
多进程的问题:进程的上下文环境(context)
文件描述符号是整数以及对应上下文环境
多进程的问题:上下文环境共享
一.SELECT TCP服务器编程模式
1.select函数
int select(
int fds,//建议是监控的文件描述符号的最大值+1
fd_set *readfds,//读文件描述符号集合
//该参数既是输入,也是输出
//输入:被监控的描述符号
//输出:有数据的描述符号
fd_set *writefds,
fd_set *errfds,
struct timeval*timeout);//指定阻塞时间限制
//为NULL,永久
返回:
>0:发生改变的文件描述符号个数
=0:时间限制过期
=-1:异常
2.IO能否发出信号?
异步IO就是通过信号工作.
3.应用使用select
4.使用select实现TCP的多客户连接与处理
5.poll模式
int poll(
struct pollfd *fds,//监控的描述符号
int nfds,//监控的描述符号的个数
int timeout ); //阻塞超时
二.Socket选项设置
1.socket有哪些选项可以设置
ARP
|
IP
|
|-----------------|
UDP TCP
通用选项:
SOL_SOCKET
SO_BROADCAST 广播
SO_RCVBUF 描述符号的缓冲的大小
SO_SNDBUF 描述符号的缓冲的大小
SO_REUSEADDR 地址反复绑定
SO_TYPE 描述符号类型SOCK_STREAM SOCK_DGRAM?
ICMP选项
IPPTOTO_ICMP
ICMP_FILTER
IP选项(干预系统生成IP头)
IPPROTO_IP
......
......
UDP选项
IPPROTO_UDP
......
TCP选项
IPPROTO_TCP
......
setsockopt设置选项
getsockopt获取选项
案例:
判定一个socket的数据类型AF_INET:SOCK_STREAM SOCK_DGRAM SOCK_RAW
案例:
使用选项进行数据广播.
cast_A发送
建立socket
设置广播选项
发送数据(广播方式发送)
case_B接收
建立socket
设置地址可重用选项
绑定地址
接收数据
三.OOB数据(TCP)
优先数据
send(,MSG_OOB);
recv(,MSG_OOB);
案例:
oob_server.c
recv MSG_OOB
oob_client.c
send MSG_OOB
1.OOB数据只能一个字符
2.普通数据使用一般方式接收与发送,OOB数据使用MSG_OOB接收与发送
3.一个数据使用MSG_OOB,则最后一个是OOB,其他非OOB数据
4.问题:OOB数据是优先数据。优先体现在什么地方?
四.HTTP协议以及应用
1.HTTP协议版本HTTP1.0 HTTP1.1
2.HTTP是应用协议
3.HTTP协议分成:
请求协议
响应协议
4.请求协议的格式:
请求行(请求方法 请求资源 协议版本)
请求体(请求头:请求值)
空行
数据(querystring:key=value&key=value)
5.响应协议的格式
响应行(协议版本 响应码 响应码的文本描述)
响应体(响应头: 响应值)
空行
数据(普通数据/分块数据)
1XX 正在处理
2XX 响应成功200
3XX 继续处理
4XX 客户错误
5XX 服务器错误
五.ioctl函数
实现ifconfig工具
总结:
重点:
select
广播
了解:
OOB数据
HTTP协议
应用:
独立编写TCP服务器端的select模式
编写广播
能够请求一个网页,并且解析响应