zoukankan      html  css  js  c++  java
  • 区块链技术基础语言(三十二):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去组织数据,以符合指定的协议,让编程变得更简单。

     

     

     

    1.3 TCP的C/S架构

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

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

     

     

     

    1.4 示例程序

    1.4.1 简单服务器

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

     

     

    1.4.2 简单并发服务器

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

     

     

     

    二、HTTP编程

    2.1 概述

    2.1.1 Web工作方式

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

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

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

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

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

     

     

     

    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所示。它是互联网应用中最为广泛的一种网络协议,详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

     

     

     

    2.2 HTTP 请求和应答

    2.2.1 客户端向服务器请求包

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

     

     

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

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

     

     

     

    参考资料

    [1] 

    [2] 

  • 相关阅读:
    关于学习c++服务端的进度,一边更新,一边学习
    Ubuntu20.04 用git上传GitHub文件
    省赛菜鸡打铜记
    Filename too long unable to checkout working tree warning: Clone succeeded, but checkout failed.
    java 对象转Json字符串 --- 报declares multiple JSON fields named XXX 解决方法
    配置win10电脑右下角任务栏时间显示时分秒
    HTTP与HTTPS
    为人三会 口才三绝 修心三不
    1093
    java项目clone后不显示maven
  • 原文地址:https://www.cnblogs.com/efish/p/go-language-web-program2.html
Copyright © 2011-2022 走看看