go语言魔术方法 go语言算法

Go 语言自我提升 (三次握手 - 四次挥手 - TCP状态图 - udp - 网络文件传输)

三次握手:

为吉隆等地区用户提供了全套网页设计制作服务,及吉隆网站建设行业解决方案。主营业务为网站建设、网站制作、吉隆网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

1. 主动发起连接请求端(客户端),发送 SYN 标志位,携带数据包、包号

2. 被动接收连接请求端(服务器),接收 SYN,回复 ACK,携带应答序列号。同时,发送SYN标志位,携带数据包、包号

3. 主动发起连接请求端(客户端),接收SYN 标志位,回复 ACK。

被动端(服务器)接收 ACK —— 标志着 三次握手建立完成( Accept()/Dial() 返回 )

四次挥手:

1. 主动请求断开连接端(客户端), 发送 FIN标志,携带数据包

2. 被动接受断开连接端(服务器), 发送 ACK标志,携带应答序列号。 —— 半关闭完成。

3. 被动接受断开连接端(服务器), 发送 FIN标志,携带数据包

4. 主动请求断开连接端(客户端), 发送 最后一个 ACK标志,携带应答序列号。—— 发送完成,客户端不会直接退出,等 2MSL时长。

等 2MSL待目的:确保服务器 收到最后一个ACK

滑动窗口:

通知对端本地存储数据的 缓冲区容量。—— write 函数在对端 缓冲区满时,有可能阻塞。

TCP状态转换:

1. 主动发起连接请求端:

CLOSED —— 发送SYN —— SYN_SENT(了解) —— 接收ACK、SYN,回发 ACK —— ESTABLISHED (数据通信)

2. 主动关闭连接请求端:

ESTABLISHED —— 发送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2 (半关闭、主动端)

—— 接收FIN、回复ACK —— TIME_WAIT (主动端) —— 等 2MSL 时长 —— CLOSED

3. 被动建立连接请求端:

CLOSED —— LISTEN —— 接收SYN、发送ACK、SYN —— SYN_RCVD —— 接收 ACK —— ESTABLISHED (数据通信)

4. 被动断开连接请求端:

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实现流程:

1.  创建 udp地址结构 ResolveUDPAddr(“协议”, “IP:port”) —— udpAddr 本质 struct{IP、port}

2.  创建用于 数据通信的 socket ListenUDP(“协议”, udpAddr ) —— udpConn (socket)

3.  从客户端读取数据,获取对端的地址 udpConn.ReadFromUDP() —— 返回:n,clientAddr, err

4.  发送数据包给 客户端 udpConn.WriteToUDP("数据", clientAddr)

UDP-CS-Client实现流程:

1.  创建用于通信的 socket。 net.Dial("udp", "服务器IP:port") —— udpConn (socket)

2.  以后流程参见 TCP客户端实现源码。

UDPserver默认就支持并发!

------------------------------------

命令行参数: 在main函数启动时,向整个程序传参。 【重点】

语法: go run xxx.go   argv1 argv2  argv3  argv4 。。。

xxx.exe:  第 0 个参数。

argv1 :第 1 个参数。

argv2 :第 2 个参数。

argv3 :第 3 个参数。

argv4 :第 4 个参数。

使用: list := os.Args  提取所有命令行参数。

获取文件属性函数:

os.stat(文件访问绝对路径) —— fileInfo 接口

fileInfo 包含 两个接口。

Name() 获取文件名。 不带访问路径

Size() 获取文件大小。

网络文件传输 —— 发送端(客户端)

1.  获取命令行参数,得到文件名(带路径)filePath list := os.Args

2.  使用 os.stat() 获取 文件名(不带路径)fileName

3.  创建 用于数据传输的 socket  net.Dial("tcp", “服务器IP+port”) —— conn

4.  发送文件名(不带路径)  给接收端, conn.write()

5.  读取 接收端回发“ok”,判断无误。封装函数 sendFile(filePath, conn) 发送文件内容

6.  实现 sendFile(filePath,  conn)

1) 只读打开文件 os.Open(filePath)

for {

2) 从文件中读数据  f.Read(buf)

3) 将读到的数据写到socket中  conn.write(buf[:n])

4)判断读取文件的 结尾。 io.EOF. 跳出循环

}

网络文件传输 —— 接收端(服务器)

1. 创建用于监听的 socket net.Listen() —— listener

2. 借助listener 创建用于 通信的 socket listener.Accpet()  —— conn

3. 读取 conn.read() 发送端的 文件名, 保存至本地。

4. 回发 “ok”应答 发送端。

5. 封装函数,接收文件内容 recvFile(文件路径)

1) f = os.Create(带有路径的文件名)

for {

2)从 socket中读取发送端发送的 文件内容 。 conn.read(buf)

3)  将读到的数据 保存至本地文件 f.Write(buf[:n])

4)  判断 读取conn 结束, 代表文件传输完成。 n == 0  break

}

如何用got完成部件的转动

 

当前位置: Language Tips Columnist 专栏作家 津津乐道

万能动词“GET”的主要用法

中国日报网 2016-10-12 11:27

分享到

    

英语中,“GET”作动词时,它不仅内涵非常丰富,而且其用法颇为复杂。它是一个万能动词,备受英语人士青睐。关于GET的使用频率和语体风格,英国著名词汇专家皮尔索尔(J. Pearsall)女士在1998年出版的《新牛津英语词典》中特地指出:GET是五个最常用的英语动词之一,但它常用于非正式的口语或书面语中。为了叙述方便,下面从词性功能的角度,简要归纳一下GET的语义及语用特点,以便英语学习者能正确掌握这一万能动词的主要用法。

一、及物动词

及物动词get的用法很多,但在每种搭配中get的意义是不完全相同的。

1.用于get+sb(sth);意为“叫来某人(得到某物)”。例如:

Please go and get him. [请你去把他叫来。]

She got high marks in the final examination. [她在期末考试中得了高分。]

2.用于get+sb+sth/get+sth+for sb;意为“为某人弄到某物”。例如:

I'll get you a drink. [我去个你拿杯饮料来。]

Could you get a school timetable for me? [你能帮我弄张课程表吗?]

3.用于“get+名词+宾补”,该宾语补足语可以是:

1)不定式;意为“使……做……”(具有使役性)。例如:

You must get them to come here. [你必须让他们来这里。]

He couldn't get the car to start and went by bus. [他因无法发动车子,所以就乘公共汽车去。]

2)现在分词;意为“使……(开始)起来”或处于某种状态。例如:

What he said got us thinking. [他说话使我们思考起来。]

Can you get the machine running? [你能把这机器发动起来吗? ]

3)过去分词;其中的过去分词表示被动关系。例如:

We get our milk delivered. [我们订的牛奶送到了。]

You must get the work done by Friday. [你必须最迟在星期五以前把工作做完。]

值得注意的是,这种被动关系有时可能表示某种遭遇;这主要取决于过去分词的含义。例如:

He got his watch stolen. [他的手表被偷了。]

Ina got her fingers caught in the door. [艾娜的手指让门给夹住了。]

另外,“get sth done”和“have sth done”在语义及语用上都有区别;前者通常表示动作让别人完成,后者通常表示动作由自己完成。例如:

She got her hair cut yesterday. [她昨天剪了头发(别人剪的)。]

A week ago I had a hundred dollars saved. [一个星期前我节省了一百美元(自己省的)。]

4)形容词;意为“使……(变成某种状态)”。例如:

What he said got us angry. [他说的话让我们很生气。]

We've got everything ready. [我们已把一切都准备好了。]

二、不及物动词

不及物动词get的用法也很多,不同的搭配有不同的意义。

1.用于“get+形容词”;get相当于系动词,构成系表结构说明主语的状况、性质、特征等情况。例如:

She got sick. [她生病了。]

Please don't get angry. [请不要生气。]

值得一提的是,英国著名语法专家斯旺(M. Swan)先生在1980年出版的专著《实用英语惯用法》中指出:get不能与表示颜色的形容词构成系表结构。例如不说:

* Leaves get brown.

但可以把get改为go:Leaves go brown.[树叶变棕色。]

另外,get用进行时态来表示状态的改变。例如:

The weather is getting cold. [天气逐渐变冷。]

I'm getting very deaf, you know. [你知道,我的耳朵越来越聋了。]

用进行时态的get还可以与形容词的比较级连用,强调渐进过程。例如:

The things are getting worse. [事情变更糟了。]

Our life is getting better and better. [我们的生活是越来越好了。]

2.用于“get+副词”,表示位置的变换;其中一些已成为成语。例如:

Where did you get on? [你上哪儿去了?]

The news soon got abroad. [这消息很快就传开了。]

3.用于“get+不定式”(构成复合谓语),表示一种状态的变化。例如:

How did you get to be captain? [你怎么当上队长的?]

I'll never get to understand him. [我永远不会理解他。]

4.用于“get+现在分词”;这种用法主要见于美国英语。例如:

We'd better get going, I suppose. [我想我们最好赶紧动身。]

They got talking and didn't notice the time. [他们谈了起来并没有注意时间。]

5.用于“get+过去分词”;这时get表示的是相当于become(即系动词)的意思,后面的过去分词属形容词范畴(即形容词化的过去分词),作主语补语。例如:

He got very worried. [他变得很担心。]

She gets easily excited. [她很容易激动。]

三、助动词

get作为助动词,它与过去分词构成被动语态(即Get-Passive)。中国著名语言学家周海中先生在1990年发表的论文《Get-Passive研究》中指出:目前,Get-Passive的使用还没有Be-Passive那么广泛,一般限于口语和非正式书面语;然而,这一被动语态却有着用得愈来愈多的趋势,这种语言现象很值得我们重视和研究。

Get-Passive除了在形式和语体上与Be-Passive有区别外,在语义及语用上也有其特点。美国著名语言学家伯恩斯坦(T. Bernstein)先生在1981年出版的专著《注意你的语言》中认为:当强调状态时,最好使用Be-Passive;当强调动作时,最好使用Get-Passive。他给了一个颇有趣的例句:She has been married, so often you might think she enjoys just getting married, not being married.

Get-Passive明确地表示做出动作的时间,而Be-Passive则表示动作造成的状态的持续时限。例如:

At that time he was not yet married, but he got married in 1920. [当时他还没有结婚,但他在1920年结婚了。]

因为Get-Passive具有这一语义特点,所以以下一句不能成立:

* He got married a long time.

但我们可以说:He was married a long time. [他结婚很长时间了。]

就感情色彩而言, Get-Passive一般都有不利、不幸、不愉快或不如意的意义色彩;而Be-Passive可以表示褒义、贬义或中性意义。例如:

John got arrested by the police. [约翰被警察逮捕了。]

Mariah got dismissed from the service. [玛丽亚被解雇了。]

某些动词用于Get-Passive时,虽然在形式上是被动的,但在意义上却是主动的。例如:

We got started at noon. = We started at noon. [我们中午开始。]

Good-bye and write me as soon as you get settled. = Good-bye and write me as soon as you settle. [再见,你安顿下来后尽快给我写信。]

这类动词还有confuse[迷惑]、divorce[离婚]、dress[穿着]、engage[订婚]、lost[迷路]、marry[结婚]、wash[洗净]等。

最后一提的是,由动词get构成的成语,如get hell[受严厉处罚]、get hot[恼怒,生气]、get nowhere[无效,徒劳]、get out[出去,离开]、get rid of[摆脱,除去]、get through with[做完,办完]等就有近百条。这些成语既有字面意义,又有引申意义或比喻意义。它们是英语宝库中的明珠,其用法同样值得学习者掌握。

本文仅代表作者本人观点,与本网立场无关。欢迎大家讨论学术问题,尊重他人,禁止人身攻击和发布一切违反国家现行法律法规的内容。

(本文作者为英国牛津大学访问学者 林娜博士)

上一篇 : 《Madam Secretary》中的经典口语句型

下一篇 : 安全:到底是safety,还是security?

分享到

    

中国日报网英语点津版权说明:凡注明来源为“中国日报网英语点津:XXX(署名)”的原创作品,除与中国日报网签署英语点津内容授权协议的网站外,其他任何网站或单位未经允许不得非法盗链、转载和使用,违者必究。如需使用,请与010-84883561联系;凡本网注明“来源:XXX(非英语点津)”的作品,均转载自其它媒体,目的在于传播更多信息,其他媒体如需转载,请与稿件来源方联系,如产生任何问题与本网无关;本网所发布的歌曲、电影片段,版权归原作者所有,仅供学习与研究,如果侵权,请提供版权证明,以便尽快删除。

你可能还感兴趣的文章

川普推特撕X闯祸 美民众:你还是关了吧

《星球大战》粉丝要求把莱娅公主正式列入迪士尼公主

《单身日记3:好孕来袭》电影精讲(视频)

关于《神夏》你不知道的十件事

go 语言中的 rune

rune是Go语言中一种特殊的数据类型,它是int32的别名,几乎在所有方面等同于int32,用于区分字符值和整数值,官方解释如下:

下面我们通过一个例子来看一下:

我们猜测一下结果,hello5 个字符+1 个空格+3 个汉子,算起来应该是 9 个,长度为 9 才对,但是我们执行一下,

结果打印是 15,这是为什么呢?

所以计算出的长度就等于 5+1+3*3=15

如果我们需要计算出字符串的长度,而不是底层字节的个数,那么可以使用下面的方法:

运行结果如下:

在 rune 定义上方还有一个,byte = uint8


本文名称:go语言魔术方法 go语言算法
文章分享:http://scyanting.com/article/dodpejc.html