序:
Socket通信可以分为TCP和UDP两种方式,也可以分为顺序通信和并发通信两种形式,因此2*2=4,我们可以得到Socket服务器的四个典型分类:
1.循环不连接型
2.循环连接型
3.并发不连接型
4.并发连接型


1.循环不连接型

我们知道,所谓循环不连接就是Server1次只处理1个Client,然后这里处理的是UDP。主要分为以下四步:
1)建立Socket套接字
2)绑定本地IP&Port(其中ip用的是inaddr_any通配符形式)
3)Server反复接收client的request
4)Server遵循protocol,构造数据报文,发给Client

这里由于是udp无连接形式,数据发送使用的是sendto()函数,其中,client的地址会从recvfrom()中自动抓取。注意,无连接形势必须由client首先主动联系server。但有连接形势下,在cs建立TCP连接后,没有规定谁先发送流数据。

2.循环连接型

参考上图,我们总结出循环模型下TCP的Server的工作流程如下:
1)建立Socket绑定port
2)将主Socket设置位listen模式,对客户端的requests进行监听
3)调用accept()->一个等待阻塞机制的函数,并创建新的socket连接通信
4)遵守protocol,接收数据,响应client
5)close socket,并返回3继续等待

3.并发无连接型

这里也就是指并发下的UDP,就是使用多线程的模式。工作流程如下:
主线程1)创建Socket并绑定port
主线程2)反复recvfrom()接收client的请求,同时创建新的子线程来响应客户

子线程1)接收请求
子线程2)构造数据报文并sendto()发给client
子线程3)exit

**注意:**根据并发原理,主线程可以在子线程工作的同时继续创建新的子线程进行处理请求,同时多个子线程可以实现同时工作的效果,从而同时服务多个客户。

4.并发连接型

这里也就是指并发TCP Server。工作流程如下:
主线程1)主Socket+port绑定
主线程2)主Socket进行listen
主线程3)反复进行accept(),同时创建新的子线程处理客户请求,继续接收下一个请求

子线程1)建立新的Socket recv服务请求
子线程2)与client进行交互
子线程3)close connection

备注:起到connect情形下的多客户同时服务的效果。

总结:
学习完Socket编程的内容后,了解了其主要的函数功能,也熟悉了client与server交互的详细过程以及不同通信方式的差别。

书山有路勤为径,学海无涯苦作舟!

Socket服务器分类与流程总结相关推荐

  1. 基于TCP/UDP的socket服务器搭建流程

    目录 TCP/UDP概念介绍 一.TCP/UDP对比 二.端口号的作用 三.字节序 1.概念 2.分类 3.C程序在内存空间的映射 socket服务器与客户端开发流程 一.流程介绍 二.socket服 ...

  2. php后端如何搭建socket服务,从php做一个简单的socket服务器流程

    socket的中文名字称为套接字,这类物品就是说对TCP/iP的"封裝".实际中的互联网事实上只能四层罢了,从上至下分別是网络层.传输层.网络层.统计数据链路层.最常见的.com协 ...

  3. Go语言实战 : API服务器 (2) 运行流程

    1.API服务器的总流程 分为两步: 启动API服务器 API服务器对HTTP请求进行处理 2.API服务器启动流程 解析配置文件,利用配置文件完成对服务器的初始化配置 初始化logger,开启日志记 ...

  4. 阿里云官网购买云服务器完整版流程(图文教程)

    现在提到购买云服务器,无论是个人站长还是企业用户,都将阿里云作为云服务器的首选服务商,阿里云服务器可以用来建设网站或者部署小程序.APP系统等应用.那么,很多新手想买阿里云服务器,但不知道在阿里云服务 ...

  5. C++Web服务器(一):服务器整体运行流程

    服务器整体运行流程 服务器介绍 服务器端整体运行流程 webserver的初始化 日志.数据库.线程池和触发模式 主线程监听连接 主线程处理监控文件描述符上的事件 服务器介绍 本项目大部分参考社长的T ...

  6. UDP服务器客户端编程流程

    UDP服务器客户端编程流程 UDP编程流程 UDP服务端代码实现 UDP客户端代码实现 UDP服务端客户端代码详解 UDP编程流程 UDP提供的是无连接.不可靠的.数据报服务 UDP是尽最大能力进行传 ...

  7. 小程序js+django+服务器后台搭建流程总结(第五周学习记录)

    学习记录 这周的工作依然是做一些服务器的调试工作,但是为了方便这周末的展示,我打算把这段时间的所有后台搭建工作和对所有服务器的操作流程做一个系统的总结和归纳,方便学习记录与交流 一.微信小程序js部分 ...

  8. TCP服务器客户端编程流程

    TCP服务器客户端编程流程 TCP编程流程 主机字节序列和网络字节序列 套接字地址结构 通用socket地址结构 一般使用会定义一个专用的套接字结构 IP地址转换函数 网络编程接口 TCP服务段代码实 ...

  9. C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)

    原创性申明 本文作者:小竹zz  博客地址:http://blog.csdn.net/zhujunxxxxx/article/details/43573879转载请注明出处 引言 我一直在探寻一个高性 ...

  10. 爬虫基础(一)之概念、作用、分类和流程

    爬虫基础(一)之概念.作用.分类和流程 1. 爬虫的概念 模拟浏览器,发送请求,获取响应        浏览器相当于客户端 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端(如网易云音乐)(主要 ...

最新文章

  1. html中使用地图和area,根据参数对area的颜色进行改变,AE考试题
  2. 1至m为PQ节点,m+1至n-1为PV节点,n为平衡节点
  3. hubuild 打包ios_iOS 通过HBuilder进行云端打包ipa文件
  4. 大会直击|微软亚洲研究院刘铁岩:深度学习成功的秘密
  5. vb.net中的-String类
  6. 外媒:下代iPad Pro将同时具备无线充电和反向无线充电功能
  7. 关于sql多条件查询,但又不确定值的个数的方法。
  8. 数据分析,如何构建指标体系
  9. Linux中的Tomcat500异常,Linux处理Tomcat异常的方法
  10. 潜在失效模式和后果分析 FMEA 10分钟教程
  11. 几何画板如何生成三角函数图像
  12. 基于JavaScript+css的购物网站项目
  13. MAX to UE4 单位设置
  14. 财务管理系统-数据库模块
  15. kotlin 实战之核心基础特性总结
  16. 数据仓库系列(四)数仓架构以及多维数据模型的设计
  17. QT中文字体显示以及字体大小不能改变的问题
  18. 常规放大电路和差分放大电路
  19. html 卡片布局 怎么,卡片式格局(CardLayout)
  20. 谷粒学苑项目实战(九):实现阿里云对象存储OSS功能

热门文章

  1. 学习笔记4--惯性导航及总结
  2. 大地测量学基础 (复习)
  3. 清除电脑多余垃圾--清除垃圾.bat文件 附保姆级操作步骤
  4. 墨卡托与经纬度转换工具
  5. python还可以这么玩?用Python把视频转换为字符动画(含音频、高清、彩图)【附源码】
  6. Vue+百度地图api
  7. 如何在虚拟机下安装一个Linux操作系统?(简简单单30步,安装Linux详细教程)
  8. BackTrack5(BT5) 硬盘安装 教程
  9. 应用程序无法启动,因为应用程序的并行配置不正确 解决方案
  10. 欧姆龙, PLC CJ2M标准程序,一共控制12个伺服电机