4种类型基本服务器 笔记

循环无连接服务器基本流程
循环就是服务器一次只处理一个客户的服务请求,处理完了再去处理下一个。
1创建一个udp套接字
2绑定端点地址,不要绑定具体的ip地址(INADDR_ANY+端口号)
3反复接收来自客户端的请求
4遵循应用程序协议,按照这个协议处理请求,构造响应报文,发送给客户。
数据发送
不论是面向连接的还是无连接的服务器都不能使用connect函数建立连接,因为connect函数只能用于客户端
无连接服务器使用sendto函数发送数据报
socket 服务器端的套接字
data 指针指向一个缓存 里面是数据
length 是字节数
flags 调试或控制选项 一般置零
destaddr 指向结构一个指针(客户端端点地址)
addrlen 地质结构长度

如何知道客户端的端点地址,是在调用recvfrom函数接收数据时,自动提取。接收数据的同时,自动提取。
buf 接受存储客户端发过来的数据
from 提取客户端的端点地址,是个指针,指向客户端的一个缓存
fromlen 源地址长度

循环面向连接的服务器流程
1创建(主)套接字,并绑定熟知端口号
2设置(主)套接字,设置为被动模式
3调用accept函数接收下一个连接请求,如果没有请求,就在那里阻塞,若有则建立一个新的套接字
4真正通信的使用新创建的套接字进行通信
5完成特定客户服务后,关闭连接,返回步骤3

并发无连接服务器基本流程
主线程1(主线程第一步干什么):创建udp套接字,并绑定熟知端口号;
主线程2:反复调用recvfrom函数,接收下一个客户的请求,并创建新县城处理客户的服务请求
子线程1:接受一个特定请求
子线程2:一局应用程序协议来构造响应报文,并调用sendto发送;
子线程3:退出(一个子线程处理一个请求后即终止)
主线程同时再次调用recvfrom,主子线程同时运行,处理请求。

并发面向连接的服务器基本流程
主线程1(主线程第一步干什么):创建udp套接字,并绑定熟知端口号;
主线程2:设置(主)套接字设置成被动监听模式,准备泳衣服务器;
主线程3:反复调用accept函数接受下一个连接请求(通过主套接字),并创建一个新的子线程处理该客户请求;
在并发的服务器里会创建一个子线程,由子线程进行通信,主线程继续等待请求
子线程1:接受一个客户的服务请求(通过新创建的套接字);
子线程2:遵循应用层协议与特定客户进行交互;
子线程3:关闭或者释放连接并且退出(线程终止)
并发可以同时为多个客户提供服务
服务器的实现
设计一个底层过程隐藏底层代码 passivesock
注意服务名和端口号的映射,还有协议号和协议名的映射。绑定端点地址

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值