【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)

觉得有帮助请点赞关注收藏~~~

Socket编程,就是对网络中不同主机上的应用进程进行双向通信的端点的抽象,一个Socket就是网络上进程通信的一端,提供了应用层利用网络协议交换数据的机制,从所处的地位来讲,Socket上连应用进程,下连网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议进行交互的接口

提起Socket就不得避免的要说到TCP/IP 而Socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口,也就是复杂的TCP/IP协议族隐藏在Socket接口后面,让Socket去组织数据,以符合指定的协议

一、Socket简介

上面已经知道网络中的进程是通过Socket通信的,Socket起源于UNIX 而UNIX/LINUX基本原理之一就是一切皆文件,都可以用打开读写模式操作,Socket相当于是一个特殊的文件,Socket函数就是对网络进行的操作。

Socket的任务就是让服务器端和客户端进行连接,然后发送数据,先从服务端说起,服务端先初始化Socket,然后与端口绑定,对端口进行监听,调用Accept函数阻塞,等待客户端连接,在这时,如果客户端初始化一个Socket,然后连接服务器,如果连接成功,这时客户端与服务器端的连接就建立了,客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

二、Socket函数的基本使用

Socket函数,既然Socket是 Open-Write/Read-Close模式的一种实现,那么Socket就提供了这些操作对应的函数接口

public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType,protocolType);

Bind函数

当调用Socket函数创建一个Socket对象时,返回的Socket对象存在于协议族空间中,但没有一个具体的地址,要想给他赋予一个地址,就必须调用Bind函数 否则会随机分配一个端口

public void Bind(EndPoint localEP);

Listen,Connect函数

如果一台服务器在调用Socket Bind函数后 就会调用Listen函数监听这个Socket对象,如果客户端这时调用Connect函数发出连接请求,服务器端就会接收到这个请求

Accept函数

调用完上面的函数后,服务器端会调用Accept函数接收请求,这样连接就建立好了,此时就可以进行网络IO操作了,Accept函数代表启动TCP连接

public Socket Accept();

Send,Receive函数

Receive函数负责读取内容,Send函数将buffer中的bytes字节内容发送出去

Close函数

完成上述操作后要关闭响应的Socket对象,就像操作完文件后要调用Close函数关闭文件一样

public void Close();

三、Socket中TCP的三次握手详解

我们知道TCP建立连接时要进行三次握手,三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端总共三个包以确认连接的建立,在Socket编程中,这一过程由客户端执行Connect出发

第一次握手:客户端执行Connect函数触发连接,将标识位SYN置为1,并产生一个随机值sqe=j,并将该数据包发送给服务器端,客户端进入发送状态,等待服务器端确认

第二次握手:服务器端收到数据包后由标识位SYN=1知道客户端请求建立连接,客户端将标识位SYN置为1,然后令ACK=J+1 并产生一个随机数seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入接收状态

第三次握手: 客户端收到数据包后,检查ACK是否为J+1,如果正确则将标识位ACK置为1,之后再令ACK=k+1,并将数据包发送给服务器端,服务器端检查ACK是否为K+1,如果正确则连接成功,客户端和服务器端进入成功状态,完成三次握手,客户端和服务器端就可以开始传输数据

四、Socket中TCP的四次挥手

结束连接时TCP需要四次挥手 如下图所示

某个应用进程首先调用Close函数主动关闭连接,这时TCP发送一个FIN M

另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认,它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到其他数据

一段时间之后,接收到文件结束符的应用进程调用Close函数关闭它的Socket,这会使他的TCP也发送一个FIN N

接收到这个FIN的源发送端的TCP对它进行确认,这样每个方向上都有一个FIN和一个ACK

创作不易 觉得有帮助请点赞关注收藏~~~

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
C# 开发者
C# 一分钟浅谈:Socket 编程基础
【10月更文挑战第7天】本文介绍了Socket编程的基础知识、基本操作及常见问题,通过C#代码示例详细展示了服务器端和客户端的Socket通信过程,包括创建、绑定、监听、连接、数据收发及关闭等步骤,帮助开发者掌握Socket编程的核心技术和注意事项。
88 3
C# 一分钟浅谈:Socket 编程基础
|
21天前
|
消息中间件 网络协议 C#
C#使用Socket实现分布式事件总线,不依赖第三方MQ
`CodeWF.EventBus.Socket` 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。
C#使用Socket实现分布式事件总线,不依赖第三方MQ
|
1月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
101 1
|
3月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
2月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【9月更文挑战第6天】
|
3月前
|
网络协议
socket编程(2) -- TCP通信
socket编程(2) -- TCP通信
40 0
|
5月前
|
Rust 图形学
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
126 1
|
5月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
48 1
|
5月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
41 1
|
4月前
|
网络协议 Java
如何在Java中使用Socket编程实现TCP连接?
在Java中,通过Socket编程实现TCP连接非常常见。以下演示了基本的TCP通信流程,可根据具体需求进行扩展。
255 0