Socket网络通信流程及原理

Socket

简介

Socket称为” 套接字 “, 网络上的两个程序通过一个双向的通信连接实现数据的连接, 这个连接的一端称为一个socket, 应用程序中通常通过socket向网络发出请求或者应答网络请求
如下图所示, 是我简单画的一个socket的通信图

网络通信的要素

我们没有IP地址是不是就找不到服务器, 没有端口就会找不见程序

网络上的请求就是通过Socket来建立连接然后互相通信

IP地址 ( 网络上主机设备的唯一标识 )

端口号 ( 定位程序 )

用于标示进程的逻辑地址, 不同进程的标示
有效端口: 0-65535, 其中0-1024是由系统来使用的, 对之进行了保留, 我们在使用的时候, 一般使用1024以上的端口

传输协议 ( 也就是用什么样的方式进行交互 )

也就是通讯的规则
常见的有TCP&UDP

TCP ( 传输控制协议 )

  1. 建立连接, 形成传输数据的通道, 比如说我们使用的http就是
  2. 在建立连接中进行大数据传输 ( 数据大小不受限制 )
  3. 通过三次握手完成连接, 是可靠协议, 安全送达
  4. 必须建立连接, 效率稍低, 每一次建立连接之前都会进行三次握手, 就如上图, 打通管道之前要进行三次握手, 发送/接收/响应

UDP ( 用户数据报协议 )

  1. 将数据及源和目的封装成数据包中, 不需要建立连接
  2. 每个数据报的大小限制在64k之内
  3. 因为无需建立连接, 因此是不可靠协议
  4. 不需要建立连接, 速度快

Socket通讯流程

这个是一个TCP的通讯流程, 我在上面做了一些简单注释

服务端绑定端口, 监听到有效端口, 接收连接, 此时我们的TCP服务端和TCP客户端也就建立了一个有效可连接的通道, 之后TCP客户端, 向TCP服务端请求数据, TCP服务端接到请求数据之后, 进行读取, 读取成功向TCP服务器做出响应, TCP客户端在次进行读取, 读取成功则会关闭, 然后会向TCP服务器做出结束连接的通知, TCP服务器进行读取, 接收完毕那么我们的TCP服务端也会进行关闭, 这样我们的TCP-Socket一个通讯流程就结束了

实现Socket服务器监听

  1. 使用C语言实现
  2. 使用CocoaAsyncSocket ( OC )第三方框架, 内部是对C的封装

telnet 连接某个服务器上的某个对应端口的服务, 后面是终端命令后的某网站的输出” Trying 61.135.169.121…
telnet: connect to address 61.135.169.121: Operation timed out
Trying 61.135.169.125.. .”

思路:
那么我们怎样对服务器进行一个监听呢? 简单来写一下思路

  1. 导入CocoaAsyncSocket 创建服务器监听, 并且开启主运行循[[NSRunLoop mainRunLoop] run];
  2. 实现监听内部方法, 创建服务端socket对象, 绑定端口号, 确定客户端是否连接成功
  3. .将客户端socket保存起来, 一旦同意连接,监听数据读取,如果有数据会调用下面的代理方法
  4. 返回 “服务” 选项
  5. 在代理方法中, 客户端传递的数据 转成字符串
  6. 监听数据读取
  7. 接收/发送成功, 关闭

转发消息服务

多个客户端连接到服务器, 当一个客户端发送消息服务器时候, 服务器转发给其他已经连接的客户单, 那么他们是通过什么来确定呢, 通过端口号, 客户端的端口号是系统分配的

  1. 在以上的客户端内我们来增加只多个
  2. 遍历socket不等于自己当前的socket

长连接和短连接

Socket层上的协议

  1. Socket层上的协议, 也就是数据传输的格式
  2. HTTP协议
    简单举例子: 请求头 请求体 响应头 响应体, 请求数据类似于字典
  3. XMPP协议
    是一个即时通讯协议, 可扩展消息处理现场协议基于可扩展语言( XML )的协议, 它用于即时消息 ( IM ) 及在线现场探测, 环信用的也就是XMPP协议, 典型的C/S架构, 基本网络形式是刻度端通过TCP/IP连接到服务器, 通过Socket建立连接, 然后在之上传输XML流, 只需要理解其接受的类型及返回的类型, 便可以较为不错的利用XMPP来进行数据通信
  4. 自定义即时通讯协议

技术交流q群150731459

吃粑粑的毕教授 wechat
欢迎您扫一扫上面的微信公众号,订阅文章!

本文标题:Socket网络通信流程及原理

文章作者:吃粑粑的毕教授

发布时间:2017年11月12日 - 21:11

最后更新:2017年11月12日 - 22:11

原始链接:http://www.2bjs.com/IM/Socket网络通信流程及原理/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

给糖吃的人都是最美丽最帅气的人,感谢你们哦
0%