博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络通信Socket编程基础
阅读量:4116 次
发布时间:2019-05-25

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

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()得到的协议地址以及数据报,服务器就可以给客户发送一个应答。

转载地址:http://lnupi.baihongyu.com/

你可能感兴趣的文章
Linux网络编程---I/O复用模型之poll
查看>>
Java NIO详解
查看>>
在JS中 onclick="save();return false;"return false是
查看>>
idea 有时提示找不到类或者符号
查看>>
matplotlib.pyplot.plot()参数详解
查看>>
MFC矩阵运算
查看>>
ubuntu 安装mysql
查看>>
c# 计算器
查看>>
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输出文件流ofstream用法详解
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>