三次握手:
被动端(服务器)接收 ACK —— 标志着 三次握手建立完成( Accept()/Dial() 返回 )
四次挥手:
滑动窗口:
通知对端本地存储数据的 缓冲区容量.—— write 函数在对端 缓冲区满时,有可能阻塞.
TCP状态转换:
① 主动发起连接请求端:CLOSED —— 发送SYN —— SYN_SENT(了解) —— 接收ACK、SYN,回发 ACK —— ESTABLISHED (数据通信)
CLOSED —— LISTEN —— 接收SYN、发送ACK、SYN —— SYN_RCVD —— 接收 ACK —— ESTABLISHED (数据通信)
ESTABLISHED —— 接收 FIN、发送 ACK —— CLOSE_WAIT —— 发送 FIN —— LAST_ACK —— 接收ACK —— CLOSED
windows下查看TCP状态转换:
netstat -an | findstr? 端口号
Linux下查看TCP状态转换:
netstat -an | grep? 端口号
TCP和UDP对比:?
TCP: 面向连接的可靠的数据包传递. 针对不稳定的 网络层,完全弥补.ACK
UDP:无连接不可靠的报文传输. 针对不稳定的 网络层,完全不弥补.还原网络真实状态.
?优点?????????? 缺点
TCP: 可靠、顺序、稳定 ?????? 系统资源消耗大,程序实现繁复、速度慢
UDP:系统资源消耗小,程序实现简单、速度快 ???? 不可靠、无序、不稳定
使用场景:
TCP:大文件、可靠数据传输. 对数据的 稳定性、准确性、一致性要求较高的场合.
UDP:应用于对数据时效性要求较高的场合. 网络直播、电话会议、视频直播、网络游戏.
UDP-CS-Server实现流程:
①? 创建 udp地址结构 ResolveUDPAddr("协议", "IP:port") —— udpAddr 本质 struct{IP、port}UDP-CS-Client实现流程:
①? 创建用于通信的 socket. net.Dial("udp", "服务器IP:port") —— udpConn (socket)UDPserver默认就支持并发!
------------------------------------
命令行参数: 在main函数启动时,向整个程序传参. 【重点】
xxx.exe:? 第 0 个参数.
argv1 :第 1 个参数.
使用: list := os.Args? 提取所有命令行参数.
获取文件属性函数:
os.stat(文件访问绝对路径) —— fileInfo 接口
fileInfo 包含 两个接口.
Name() 获取文件名. 不带访问路径
Size() 获取文件大小.
①? 获取命令行参数,得到文件名(带路径)filePath list := os.Args①.) 只读打开文件 os.Open(filePath)
?for {
?}
网络文件传输 —— 接收端(服务器)
① 创建用于监听的 socket net.Listen() —— listener①.) f = os.Create(带有路径的文件名)
for {
}
智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键.
我们先来了解一下智能合约调用的基础原理.智能合约运行在以太坊节点的 EVM 中.所以呢要 想调用合约必须要访问某个节点.
以后端程序为例,后端服务若想连接节点有两种可能,一种是双 方在同一主机,此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call,远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信.
接着,我们来了解一下智能合约运行的过程.
智能合约的运行过程是后端服务连接某节点,将 智能合约的调用(交易)发送给节点,节点在验证了交易的合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认,至此交易才算完成.
就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit,软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,所以呢若想使用 Go 语言连接节点、发交易,直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了.
最后提醒一下大家,智能合约被调用的两个关键点是节点和 SDK.
此时此刻呢介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约的调用.这是有固定 步骤的,我们先来说一下总体步骤,以下面的合约为例.
步骤 01:编译合约,获取合约 ABI(Application Binary Interface,应用二进制接口). 单击【ABI】按钮拷贝合约 ABI 信息,将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi).
最好能将 calldemo.abi 单独保存在一个目录下,输入"ls"命令只能看到 calldemo.abi 文件,参 考效果如下:
此时此刻呢设置 module 生效和 GOPROXY,命令如下:
在项目工程内,执行初始化,calldemo 可以自定义名称.
golang学习比较简单,不过任何一门语言都不是孤立存在的,今天这一节简要说明一下golang开发的学习路线
①golang基础,包括go语言安装,go语言语法,流程控制语句,函数,方法,面向对象概念,网络编程,并发编程等
链乔教育在线祝您学有所成.
以上就是土嘎嘎小编为大家整理的go语言流程相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!