Socket流程
来源:互联网 发布:网站js被劫持 编辑:程序博客网 时间:2024/06/01 11:56
1.Socket基本概念介绍
Socket是套接字的英文名称,主要用于网络通信编程。前几天看网络通信,发现有许多概念,诸如同步/异步,阻塞/非阻塞等,感觉迷惑不清,因此就先介绍一下这些概念。
同步方式是指发送方不等接收方响应,便接着发送下个数据包的通信方式;
异步方式是指发送方发出数据后,等到接收方发回响应才发下个数据包的通信方式。
阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用Receive()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在Receive()这个函数调用上,直到读到一些数据,此函数调用才返回。
非阻塞套接字是指执行此套接字的网络调用,不管是否执行成功,都立即返回,比如调用Receive()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际windows网络通信软件开发中,异步非阻塞套接字使用最多,例如平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。
2.Socket编程原理
Socket编程中最常使用的两种协议,即面向连接的TCP协议和无连接的UDP协议。下面结合图示分别来说明(图1是面向连接的,图2是无连接的)
对于TCP,步骤如下:
(1)服务器首先启动,然后在某一时刻启动客户机与服务器建立连接。服务器与客户机首先调用Socket()建立一个套接字Socket
(2)服务器调用Bind()将套接字与一个本机指定端口绑定在一起,再调用Listen()使套接字处于一种被动的准备接收状态,这时客户机建立套接字便可以通过调用Connect()和服务器建立连接。
(3)服务器可以调用Accept()方法来接受客户机连接,然后继续侦听端口,并发出阻塞,直到下一个请求出现,从而实现多个客户机连接。
(4)连接建立之后,客户机和服务器之间就可以通过连接发送和接收数据。
(5)等待数据传输结束,双方调用Close()关闭套接字。
对于UDP,客户机并不与服务器建立连接,而仅仅调用函数SendTo()给服务器发送数据报。相似地,服务器也不从客户端接收一个连接,只是调用函数ReceiveFrom(),等待客户端来的数据。依照ReceiveFrom()得到的协议地址以及数据报,服务器就可以给客户发送一个应答
- Socket流程
- 【socket】socket 工作流程
- Socket编程的流程
- Socket编程模型流程
- windows socket编程流程
- socket流程与函数
- Socket通信基本流程
- socket 流程解析
- socket编写流程
- socket通信基本流程
- Socket开发流程
- TCP UDP Socket流程
- c++ Socket编程流程
- Socket通信基本流程
- socket调用流程分析
- socket流程图解
- SOCKET通信流程
- 服务器端socket使用流程
- 使用namp扫描端口
- 51nod1376 最长递增子序列的数量
- Unity3D 制作场景地图 插件
- 前端js经典面试题目
- HDU
- Socket流程
- linux后台运行和关闭、查看后台任务
- 课程设计.判断是否只有一个main函数
- 剑指offer----树的子结构
- python进阶学习笔记(五)——创建实例属性、初始化实例属性
- 约束高级属性Content Compression Resistance Priority和Content Hugging Priority
- 【用例】测试用例编写的一些问题
- 在windows上使用Thrift生成PHP代码
- 排序总结