博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket基本概念
阅读量:5363 次
发布时间:2019-06-15

本文共 1098 字,大约阅读时间需要 3 分钟。

Socket基本概念介绍1

 | 2017-10-10 10:00:34 | 10次阅读 | 

1.Socket基本概念介绍

Socket是套接字的英文名称,主要用于网络通信编程。前几天看网络通信,发现有许多概念,诸如同步/异步,阻塞/非阻塞等,感觉迷惑不清,因此就先介绍一下这些概念。

同步方式是指发送方不等接收方响应,便接着发送下个数据包的通信方式;

异步方式是指发送方发出数据后,等到接收方发回响应才发下个数据包的通信方式。

阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用Receive()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在Receive()这个函数调用上,直到读到一些数据,此函数调用才返回。

非阻塞套接字是指执行此套接字的网络调用,不管是否执行成功,都立即返回,比如调用Receive()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际windows网络通信软件开发中,异步非阻塞套接字使用最多,例如平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。

2.Socket编程原理

Socket编程中最常使用的两种协议,即面向连接的TCP协议和无连接的UDP协议。下面结合图示分别来说明(图1是面向连接的,图2是无连接的)

                          图1面向连接的TCP时序图

对于TCP,步骤如下:

(1)服务器首先启动,然后在某一时刻启动客户机与服务器建立连接。服务器与客户机首先调用Socket()建立一个套接字Socket

(2)服务器调用Bind()将套接字与一个本机指定端口绑定在一起,再调用Listen()使套接字处于一种被动的准备接收状态,这时客户机建立套接字便可以通过调用Connect()和服务器建立连接。

(3)服务器可以调用Accept()方法来接受客户机连接,然后继续侦听端口,并发出阻塞,直到下一个请求出现,从而实现多个客户机连接。

(4)连接建立之后,客户机和服务器之间就可以通过连接发送和接收数据。

(5)等待数据传输结束,双方调用Close()关闭套接字。

                               图2无连接的UDP时序图

对于UDP,客户机并不与服务器建立连接,而仅仅调用函数SendTo()给服务器发送数据报。相似地,服务器也不从客户端接收一个连接,只是调用函数ReceiveFrom(),等待客户端来的数据。依照ReceiveFrom()得到的协议地址以及数据报,服务器就可以给客户发送一个应答。

转载于:https://www.cnblogs.com/fushou/p/7645668.html

你可能感兴趣的文章
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
HIVE和HADOOP的一些东西
查看>>
alibaba / zeus 安装 图解
查看>>
Planned Delivery Time as Work Days (SCN discussion)
查看>>
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>
if 循环
查看>>
uva 111 History Grading(lcs)
查看>>
Python学习week2-python介绍与pyenv安装
查看>>
php判断网页是否gzip压缩
查看>>