区块链技术基础语言(三十二):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语言网络编程(下)


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

查看所有标签

猜你喜欢:

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

Code Reading

Code Reading

Diomidis Spinellis / Addison-Wesley Professional / 2003-06-06 / USD 64.99

This book is a unique and essential reference that focuses upon the reading and comprehension of existing software code. While code reading is an important task faced by the vast majority of students,......一起来看看 《Code Reading》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具