[实目]
通理联系实际巩固学知识提高处理实际问题力利社会环境接轨做准备[实务]Linux网络服务器开发(基C语言)文总结Linux网络服务器模型认识[实容]循环服务器1循环服务器时刻响应客户端请求客户程序处理采循环方式进行 2 UDP循环服务器实现非常简单UDP服务器次套接字读取客户端请求处理 然结果返回客户机21算法(UDP服务器): socket()
bind()
while(1)
{
recvfrom()
process()
sendto()
}3 TCP循环服务器实现难TCP服务器接受客户端连接然处理完成客户请求断开连接31 算法(TCP服务器)
socket()
bind()
listen()
while(1)
{
accept()
while(1)
{
read()
process()write()
}
close()
}32 TCP循环服务器次处理客户端请求客户请求满足 服务器继续面请求样果客户端占住服务器放时客户机工作TCP服务器般少循环服务器模型 二 发服务器1 弥补循环TCP服务器缺陷想出发服务器模型 发服务器思想客户机请求服务器直接处理服务器创建 子进程处理2发服务器服务器进程时刻子进程客户程序连接通信客户程序服务器时发处理客户请求 3算法(TCP服务器):socket()
bind()
listen()
while(1)
{
accept()
if(fork()0)
{
close()while(1)
{
read()
process()
write()
}
close()
exit()
}
close()
} 4 TCP发服务器解决TCP循环服务器客户机独占服务器情况改善客户程序响应速度 时带问题:响应客户机请求服务器创建子进程处理 创建子进程种非常消耗资源操作明显增加系统调度开销5 解决创建子进程带系统资源消耗想出路复IO模型51该模型般函数select相关四宏定义:int select(int fdfd_set *readfdsfd_set *writefdsfd_set *exceptfdsstruct timeval *timeout)
void FD_SET(int fdfd_set *fdset)
void FD_CLR(int fdfd_set *fdset)
void FD_ZERO(fd_set *fdset)
int FD_ISSET(int fdfd_set *fdset)52 般说文件读写时进程读写时候阻塞直定条件满足 套接字读数时缓区里面没数读(通信方没 发送数)时候读调会等(阻塞)直数读果 希阻塞选择socket设置非阻塞模式实现int socketfdsocketfdsocket(AF_INETSOCK_STREAM0)fcntl(socketfdF_SETFLO_NONBLOCK)通设置socket非阻塞模式实现轮循socket企图没数等处理非阻塞socket读取数时函数立返回种轮循会CPU处忙等方式降低性select函数解决问题53 调select时进程会直阻塞直种情况发生 1)文件读2)文件写3)超时设置时间54算法(路复IO模型): 初始化(socketbindlisten)
while(1)
{ 设置监听读写文件描述符(FD_*)
调select
果倾听套接字绪说明新连接请求建立
建立连接(accept)
加入监听文件描述符中
否说明已连接描述符
进行操作(read者write) }
路复IO解决资源限制问题着模型实际UDP循环模型TCP面 带问题服务器次处理客户请求会导致客户 会等久 三.IO模型1网络服务器模型根IO模型实现2 IO模型分步IO异步IO步IO包括阻塞IO非阻塞IO信号驱动IO路复IO根求利IO模型实现网络服务器 [实心] 通月实基掌握LinuxC语言网络编程算法技巧提高力 专业:计算机网络技术 班级:03631 学号:63103089 姓名:吕亮亮——XX0523
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档