WinSocket 编程
套接字
套接字指通信双方在通信时所使用的通信点(Endpoint),通信的双方通过通信点来交换信息和数据。不同类型的通信会使用不同的类型通信点,比如对于电话通信而言,通信点就是电话号码和分机号码的组合,这时因为如果你想和朋友通话,就需要拨打你朋友的电话号码和分机号码。对于IP网络通信而言,通信点就是套接字,即两个进程在进行网络通信的时候,他们通过套接字来交换信息和数据。
和电话通信类似,当一个进程想和另一个进程进行网络通信时,它必须知道另外一个进程所在的目标机器IP地址,同时也必须有一种机制来标识目标机器上的进程,这种机制就是我们前面章节提到的端口号,目标机器正是通过端口号才能确定应该把接收到的数据发往哪一个进程。也就是说套接字这种通信点必须通过端口号标识和IP地址,另外由于网络通信也有不同类型,同一个端口号在使用不同的传输层协议时含义是不一样的,所以套接字还和传输层协议有关。
一个套接字包含:
- IP地址
- 端口号
- 传输协议
一个已连接的TCP套接字对应如下:
【本地IP,端口,目标机IP,端口】
服务器可以分为迭代服务器和并发服务器
迭代服务器工作方式如下(UDP):
- 等待客户请求
- 当接受到客户请求时,处理该请求并把结果返回该客户
- 回到步骤1,继续等待下一个客户请求。
并发服务器的工作方式如下(TCP):
- 等待客户请求
- 当接收到客户请求,为该客户开启一个新的服务器实例(进程、线程等),并且由这个新的服务器实例来处理该客户的请求并把结果返回客户,之后该新的服务器实例就终止。
- 回到步骤一,继续等待下一个客户请求
TCP客户端与服务器交互过程
TCP服务器端连接套接字创建、关闭交互过程说明如下:
- 服务器创建一个套接字。
- 服务器把本地套接字地址(本地IP地址和本地端口)绑定(Bing)到该套接字。客户端将使用在这里的绑定的套接字地址来连接到该服务器
- 服务器把该套接字置为等待状态,也叫(Listen)这时套接字也被称为监听套接字。
- 服务器开始接受(Accept)客户端的连接请求。如果这时没有连接求,则服务器就等待请求的到来;如果有连接请求,则服务器为该连接请求创建一个新的套接字,该新的套接字用来描述这个连接,既它对应于一个四元组:[本地IP地址,本地端口,远程IP地址,远程端口]。我们把这个新的套接字被称为已连接套接字,以便于区分监听套接字。
- 服务器使用已经连接的套接字来接受来自客户端的数据,或者发送数据到客户端。
- 当完成和客户端的数据交互之后,服务器关闭套接字。
一般来说,当服务器创建了已连接套接字后,会生成一个新的服务器实例(线程或进程等)。然后这个新的实例执行5,、6步,即处理和客户端的数据交互。
TCP客户端
TCP客户端连接套接字创建,关闭过程说明
- 客户端创建一个套接字
- 客户端把本地套接字地址(本地IP地址和本地端口)绑定到套接字。注意,这个步骤对于客户端来说不是必须的。如果执行的话就按四元组中的地址分配,如果没有执行则系统自动分配地址。
- 客户端使用在步骤1中创建的套接字来连接(Connect)到一个远程套接字的地址(远程IP地址和远程端口),即服务器的监听套接字地址。在连接成功之后,这个连接将由客户端套接字来描述,这个客户端套接字也对应于一个四元组:[本地IP地址,本地端口,远程IP地址,远端端口]。此时,这个客户端套接字也成为一个连接套接字。
- 客户端使用已连接套接字发送来发送数据到服务器,或者接受来自服务器的数据。
- 当完成和服务器的数据交互之后,客户端关闭连接套接字。
这整个过程都只有一个套接字和一个客户端实例
WinSocket 编程的更多相关文章
- winsocket编程笔记(一)
前言: 因为疫情原因,现在一直在网上授课,教师在讲述winsocket这一课程时没有给予我们课本,只有毫不相搭的linux环境的socket编程视频,故于此(开学第七周)总结winsocket的内容. ...
- winSocket编程(十)完成端口
//本篇为转贴 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非 ...
- winSocket编程(九)重叠IO
重叠模型的优点 重叠模型的基本原理 关于重叠模型的基础知识 重叠模型的实现步骤 多客户端情况的注意事项 一.重叠模型的优点 1.可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口 ...
- winSocket编程(一)WSAStartup
/******************************************************************** 更新日期:2017-11-07 10:33:08* 进度:完 ...
- 用Delphi实现WinSocket高级应用
用Delphi实现WinSocket高级应用 默认分类 2009-12-19 16:48 阅读6 评论0 字号: 大大 中中 小小 Socket通信在Windows 中是排队的形式 ...
- 5、QT分析之网络编程
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002842553382/ 首先对Windows下的网络编程总结一下: 如果是服务器 ...
- QT分析之网络编程
原文地址:http://blog.163.com/net_worm/blog/static/127702419201002842553382/ 首先对Windows下的网络编程总结一下: 如果是服务器 ...
- C语言面试题大汇总之华为面试题 Eddy整理
1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...
- loadrunner测试TCP协议服务器性能
loadrunner测试TCP协议服务器性能 . 性能loadrunner测试c 最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loa ...
随机推荐
- 转:百分百激活office for mac2011的激活文件
方法:1点击finder 2点击系统盘 3点击资源库 4找到Preferences文件夹 5用压缩包里的 ...
- 英语音乐---三、Cry on my shoulder
英语音乐---三.Cry on my shoulder 一.总结 一句话总结:Cry on my shoulder 在我的肩膀上哭泣 1.If the hero never comes to you. ...
- Boostrap零散
12 row 是核心控件 class="form-control" 弹窗口<input data-toggle="modal" data-target=& ...
- linux中不同颜色的文件代表什么不同的类型
linux 文件颜色的含义,蓝色代表目录,绿色代表可执行文件,红色表示压缩文件,浅蓝色表示链接文件,灰色表示其他文件,红色闪烁表示链接的文件有问题了,黄色表示设备文件.蓝色文件----------目. ...
- HBase框架基础(四)
* HBase框架基础(四) 上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进 ...
- PostgreSQL Replication之第九章 与pgpool一起工作(2)
9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...
- GPU Command Buffer
For Developers > Design Documents > GPU Command Buffer This are mostly just notes on the ...
- 临时的js方法
//楼层的js var scroChange; //楼层跳转 function FloorGo(domId){//传入目标的id clearInterval(scroChange); var scro ...
- 基于vue的无缝滚动组件
vue-seamless-scroll A simple, Seamless scrolling for Vue.js 在awesome上一直没有发现vue的无缝滚动组件,在工作之余写了个组件,分享出 ...
- ECNUOJ 2142 放书
放书 Time Limit:1000MS Memory Limit:65536KBTotal Submit:409 Accepted:173 Description 你要把一叠书放进一些箱子里面,为 ...