区块链技术基础语言(三十二):Go语言网络编程(下)

栏目: 服务器 · 发布时间: 5年前

原文链接: 区块链技术基础语言(三十二):Go语言网络编程(下)

本文紧接上文所述,讲解socket编程和HTTP编程。

一、socket编程

在上一节我们介绍了网络体系的五层模型,介绍了每层模型所遵守的协议。TCP/IP是一个协议族,它由网络层的IP协议和传输层的TCP协议组成,其中网络层建立了主机到主机的通信,传输层建立了端口到端口的通信。只要确定主机和端口,就能实现程序之间的交流。因此,Unix系统把主机+端口,叫作“套接字(socket)”,而socket本质上是编程接口(API),它是对TCP/IP的封装。有了它,就可以进行网络应用程序的开发。

1.1 网络中进程之间的通信

网络中的每个进程都运行在独立的地址空间,为了保证两个相互通信的进程在互不干扰的前提下协调一致地工作,操作系统需要解决网间进程的标识问题。在网络概述中已经介绍过,ip地址可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序,也就是进程。因此网络中的进程通信可以通过“ip地址+协议+端口”与其它进程进行交互。而TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)。

1.2 socket套接字

Socket本质上是编程接口(API),它是对TCP/IP的封装,是应用层和其他层(传输层、网络层、数据链路层)之间的软件抽象层,它将传输层、网络层、数据链路层隐藏在socket接口后面。对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议,让编程变得更简单。

区块链技术基础语言(三十二):Go语言网络编程(下)

1.3 TCP的C/S架构

TCP的C/S架构主要分为客户端和服务器端。

服务器端先初始化socket,接着将socket与端口进行绑定(bind),然后对端口进行监听(listen),然后调用accept函数,等待客户端地请求连接。在这时如果有一个客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接(close),一次交互结束。

区块链技术基础语言(三十二):Go语言网络编程(下)

1.4 示例程序

1.4.1 简单服务器

设计一个服务器程序和客户端程序。启动服务器程序后,再启动客户端程序,客户端的程序连接到服务器程序后,客户端的信息内容会显示在服务器程序。

区块链技术基础语言(三十二):Go语言网络编程(下)

1.4.2 简单并发服务器

在1.4.1中启动服务器程序,再运行客户端程序,整个程序就会结束。现在服务器程序设计一个能同时处理多个客户端程序发送的内容。

区块链技术基础语言(三十二):Go语言网络编程(下)

二、HTTP编程

2.1 概述

2.1.1 Web工作方式

平时浏览某一网页,我们一般会打开浏览器,输入网址,回车后就可以浏览网址内容。这一简单的操作行为,系统是通过以下步骤实现的:

a. 浏览器是一个客户端,输入URL(统一资源定位符,即网址),浏览器通过请求DNS服务器获取相应的域名所对应的IP;

b. 通过IP地址找到IP对应的服务器,建立TCP连接;

c. 浏览器向服务器发送HTTP Request包,等服务器全部接收到请求包服务器才开始处理请求包,然后服务器向浏览器(客户端)返回HTTP Response(响应)包;

d. 客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容之后,就断开与该服务器之间的TCP连接。

区块链技术基础语言(三十二):Go语言网络编程(下)

2.1.2 HTTP服务器工作原理

Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。其工作原理即:

a. 客户机通过TCP/IP协议与服务器建立TCP连接;

b. 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档;

c. 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端;

d. 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。

2.1.3 HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议),是应用层的协议,如表1所示。它是互联网应用中最为广泛的一种网络协议,详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

区块链技术基础语言(三十二):Go语言网络编程(下)

 2.2 HTTP 请求和应答

2.2.1 客户端向服务器请求包

建立一个HTTP服务器,在客户端(浏览器)输入URL,向HTTP服务器发送请求包。

区块链技术基础语言(三十二):Go语言网络编程(下)

2.2.2 服务器向客户端发出的应答包

建立一个HTTP服务器和客户端,客户端连接HTTP服务器,服务器向客户端发送应答包。

区块链技术基础语言(三十二):Go语言网络编程(下)

参考资料

[1] https://studygolang.com/pkgdoc

[2] https://blog.csdn.net/qq_33530388/article/details/65935217

-END-

区块链技术基础语言(三十二):Go语言网络编程(下)

区块链技术基础语言(三十二):Go语言网络编程(下)

区块链技术基础语言(三十二):Go语言网络编程(下)

来源:链块学院

本文由布洛克专栏作者发布,不代表布洛克观点,版权归作者所有

——TheEnd——

关注“布洛克科技”

区块链技术基础语言(三十二):Go语言网络编程(下)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

像计算机科学家一样思考Python

像计算机科学家一样思考Python

(美)Allen B.Downey / 赵普明 / 人民邮电出版社 / 2013-8 / 49

《像计算机科学家一样思考python》按照培养读者像计算机科学家一样的思维方式的思路来教授python语言编程。全书贯穿的主体是如何思考、设计、开发的方法,而具体的编程语言,只是提供一个具体场景方便介绍的媒介。《像计算机科学家一样思考python》并不是一本介绍语言的书,而是一本介绍编程思想的书。和其他编程设计语言书籍不同,它不拘泥于语言细节,而是尝试从初学者的角度出发,用生动的示例和丰富的练习来......一起来看看 《像计算机科学家一样思考Python》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具