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 ...
随机推荐
- 英语影视台词---四、Sideways
英语影视台词---四.Sideways 一.总结 一句话总结:杯酒人生 Sideways,大致意思是“偏离.倾斜.转向…”.很明显中文译名与英文原名并没有什么关联,<杯酒人生>这个名字,其 ...
- pyspark import 可以通过 --py-files
公用函数的放到了 common.py 文件中. 通过 --py-files 可以在pyspark中可以顺利导入: pyspark --py-files lib/common.py > impor ...
- Kali linux 2016.2(Rolling)中的Nmap的端口扫描功能
不多说,直接上干货! 如下,是使用Nmap对主机202.193.58.13进行一次端口扫描的结果,其中使用 root@kali:~# nmap -sS -Pn 202.193.58.13 Starti ...
- IBM主机上清除告警黄灯方法
机器亮黄灯告警一般是有硬件问题(单电源等可能有安全隐患的硬件配置也可能造成黄灯亮起),见到后首先进行下硬件诊断,方法如下: 诊断系统,判断是否硬件故障:1.Root用户执行diag: 2.回车后,进第 ...
- 使用 Beego 搭建 Restful API 项目
1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...
- Unity Shader (四)片段程序示例
1.环境光+漫反射+高光+点光源 Shader "Custom/Example_Frag_1" { properties { _MainColor(,,,) _Specular ...
- Android中图片优化之webp使用
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 有关图片的优化,通常我们会用到LruCache(使用强引用.强 ...
- Qt 在圆形中贴图片
void Widget::paintEvent(QPaintEvent *) { QPainter p(this); QPixmap pix(":/images/a.jpg"); ...
- 四 过滤模式 map Only - 作业完成 bloomFilter、top10、去重
第四部分所有的模式涉及一个共同点: 不会改变原有的记录. 这些模式都是寻找数据子集的,不管结果集的规模是小(top10)还是大(像去重结果). 与第三部分差异是,他们通过对数据的相思子端坐概要与分组来 ...
- Qt编译OpenGL程序遇到的问题
软件版本号: Qt 4.8.5 依照网上的例程(http://www.qiliang.net/old/nehe_qt/lesson01.html),跑了一下基于Qt Creator的OpenGL.因为 ...