获得TCCP套接字和HTTP服务器以及服务器和客户通信的Python实例

      最后更新:2021-11-01 11:09:47 手机定位技术交流文章

      Python公司实施TCP储存和HTTP服务器,以及服务器和客户通信样本。

          • 什么是插座?
          • 服务器和客户通信协议
          • Python 完成 TCP 案件
          • 主机和端口配置
          • socket函数
          • 考虑套接字编程
          • TPTPTP服务器
          • 检查 HTTP 服务器代码
            • 服务器响应文本
            • 来自客户端的短信
          • 分析运行结果

      什么是插座?

      如下图所示,Socket是一个在应用层面与TCP/IP社区连接的中间软件的抽象层。

      复杂的TCP/IP组隐藏在Socket界面后面,对于用户来说,只有一套基本的界面,才能使Socket按照特定的协议组织数据。

      在这里插入图片描述

      服务器和客户通信协议

      由下图可理解服务器和客户通信协议:

      服务器先将 Socket 初始化, 然后再将其绑定到端口( bind), 监听端口( 听好), 呼叫接受, 等待客户端连接 。

      如果客户端初始化了 Socket, 然后连接到服务器, 并且连接成功, 客户端和服务器连接就会形成 。

      客户发送数据请求,服务器接收和处理请求,然后向客户提供回复数据,客户阅读数据,最终以互动终端关闭连接。

      在这里插入图片描述

      网络进程之间的通信:

      第一个需要回答的问题是,如何仅仅标志一个进程。

      TCP/IP聚合帮助我们解决这一问题。

      在网络一级,“ip 地址”只能识别网络的主机。

      另一方面,传输层的“协议+端口”在主机中可单独识别应用程序(程序)。

      这样就可以利用三合一地址(临时地址、协议和港口)和网络进程通信确定网络进程,以便与其他进程进行沟通。

      一个插座有四个地址:两个计算机的IP地址和两个流程使用的港口(港口),IP地址用来寻找机器,而港口用来定位流程。

      Python 完成 TCP 案件

      我们可以在互联网上使用计算机作为服务器。

      服务器打开自己的端口,被动地等待其他计算机加入。

      当其他计算机作为客户在套接头连接到服务器上时,服务器开始为客户服务。

      使用标准库中的套接字模块在 Python 中编程底套接字。

      Serverend: 使用绑定 () 函数为套接字提供固定地址和端口, 并使用倾听 () 方法被动监听端口。 当客户端试图使用连接 () 方法连接时, 服务器会接受连接并创建一个连接套接字 :

      客户端: 主动使用连接 () 查找服务器的 IP 地址和端口, 以便客户可以发现并连接到 :

      服务器端运行结果:

      客户端运行结果:

      主机和端口配置

      我的IPv4地址是。 我在同一台机器上安装了服务器和客户端。

      我通过在客户代码中设置 HIST 来测试

      然后,客户和服务器代码应提供与HIST ='相同的结果。

      也就是说,客户的HIST 想要客户的IP 交换客户的IP。

      为了证明这个概念,我将客户设置为 HIST = “ ” 。

      错误, 请再次运行 :

      s.connect((HOST, PORT))
      超时错误 : [WinError 10060] 连接尝试失败, 原因是连接器在一定时间过后没有适当回答, 或者连接主机没有响应 。

      因此,如果不使用两台计算机,知识产权客户希望与IP签订合同的IP地址可以改为“”,这是用于连接当地主机的具体IP地址。

      如果您知道服务器的 IP, 您也可以将 HIST =服务器的IP 直接设置在客户端上 。

      我要测试港口号港口

      服务器和客户端端端口号码可以同时连接,港口数目对连接没有影响;8 000和8080个都连接。

      端口号不正确, 因此无法建立连接 。

      socket函数

      ServiendSocket 是终止服务连接的函数 。 描述
      s.bind(address) 使用 AF_INET 组合( 主机、 端口) 的形式将字符串绑在地址上 。
      s.listen(backlog) 后遗迹设定操作系统在拒绝连接前可以挂起的最大连接次数。 值必须至少为 1, 大多数应用程序设置为 5 。
      s.accept() 接受 TCP 连接和返回( Conn, 地址), 如果 Conn 是一个新的软件包对象, 可用于接收和传输数据, 而地址是客户端的地址 。
      客户端套用功能 描述
      s.connect() 主动打开 TCP 服务器连接。 普通地址结构为 durk( 主机/ IP、 端口) 和 返回套接字。 错误错误 。
      s.connect_ex() 当发生错误时,连接 () 方法的扩展版本会给出错误代码, 而不是丢弃异常点 。
      公共套接头功能 描述
      s.recv() 抱歉, socket. recv (bufsize[, blags]]) 接收带子数据。 返回值是包含所接收数据的字节对象。 Bufsize 确定一次可能接收的数据的最大数量。 通常从 1024 开始 。
      s.send() 将数据发送到 Socket Socket,并将数据传输到 Socket Socket 。 (发送丢失,如果要传输的数据数量超过其本身缓存中可用的空间数量,则不会释放。 )
      s.sendall() 发送整个 TCP 数据( 基本上, 循环呼叫发送, 当要传输的数据数量超过自端缓存、 循环呼叫发送直到发布结束 )
      s.close() 套接字套接字套接字

      考虑套接字编程

      TCP服务端:

      1 制作一个套接字,并将软件包连接到本地IP和端口。

      # socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind()

      2 使用 #s. listen () 开始监听连接 。

      3 开始循环并持续接受客户端连接请求 #s. 接受 ()

      使用 #s.Recv () 和 s.Sendall () 将数据传送给对方。

      #s.exit()

      TCP客户端:

      1 创建一个套接字并连接到远程地址

      ​ # socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()

      2 在建立连接 #s.Sendall () 和 s.recv () 后发送和接收数据

      #s.exit()

      TPTPTP服务器

      TCP Socket 用于连接上述例子中的两台远程机器。

      尽管如此,插座传输过于松散,引起了一些安全和兼容性方面的关切。

      有许多应用级协议(如HTTP协议)经常用于界定套接合使用规则和所转让信息的类型。

      HTTP协议以请求答复的形式使用TCP锁。

      收到请求后,客户向服务器发送文本,服务器向客户发送文本。

      交易完成后,TCP套座即告终止。

      请求下次被引用时, 将产生新的套接字 。

      两份文件基本上都是文字文件,但HTTP协议为两份文本规定了一些格式标准。

      A.jpg 测试照片文件存储在 Python 程序文件夹中 。

      作为服务器端端,它执行终端上方的 Python 程序 。

      作为客户端,将启动另一个浏览器。

      浏览器地址栏中的 8000 类型; 或者使用另一台计算机输入服务器的 IP 地址 。

      可以看到:

      在这里插入图片描述

      检查 HTTP 服务器代码

      服务器响应文本

      如前所述,服务器根据请求向客户发送两份文本/内容和Pic_内容文本。

      整个答复分为三部分:** 起始部分**、** 头条信息** 和** body**。

      起始行就是第一行:

      它在功能上分为三个部分:HTTP/1.x指使用的HTTP版本,200指状态代码,200指HTTP协议定义的200,服务器接受并正常处理请求,OK是用户可以读取的状态代码。

      头信息出现在第一行之后, 由空行与主题分隔。 这里的文本/ content 或 pic_ content 只有一行头信息, 文本/ content 头信息 。

      主要通信格式是 html 文本。

      还有Pic_content的头条信息

      主题用jpg图像描述(图像/jpg)。

      html或jpeg文件的内容是主题信息的例子。

      (注意我们以“ rb” 模式打开jpg 文件与 Windows 兼容。 因为 jpg 被视为 Windows 下的二进制, 不需要区分 UNIX 下的文本文档和二进制文档 。)

      来自客户端的短信

      作为客户,请使用浏览器。

      客户端应用程序向服务器发送请求 。

      虽然请求也可以分为三节,但请求的结构不同于答复的结构。

      客户端向服务器发送请求, 例如 :

      该行的第一部分是请求技术(请求方法),第二部分是URL,第三部分是HTTP版本。

      现有几种方法,包括Get、PUT、POST、DELETE和HEAD。最常用的方法是GET和POST。

      Get 请求服务器将请求的资源传输到客户端 。

      POST 是客户端要求服务器接收数据的请求 。

      我们通常使用Get技术打开网页。

      我们通常在填写和提交表格时使用POST技术。

      第二个组成部分是URL,通常与资源(在服务器上或其他地方)链接。

      这是对当前服务器当前目录. Jpg 的测试 。

      根据HTTP协议的规定,服务器有义务应请求开展某些活动。

      正如我们在服务器程序中所看到的那样,我们的 Python 软件首先评估请求模式,然后根据 URL 生成不同的答案( text_ content 或 pic_content )。

      然后通过电子邮件向客户发送了回复。

      分析运行结果

      在服务器控制台中,您可以看到第一个浏览器请求 :

      Request is: b’GET / HTTP/1.1rnHost: 127.0.0.1:8000rn

      根据这一请求,服务器传输浏览器文本内容。

      浏览器在获得 text_content 后发现 html 文本 。<IMG src="text.jpg" />您知道您需要文字。 jpeg 文档配有图像, 第二次请求被迅速发送 :

      Request is: b’GET /test.jpg HTTP/1.1rnHost: 127.0.0.1:8000

      服务器的 Python 软件检查了第一行, 发现/ test.jpg 与条件相符, 从而向客户发送 pic_ content 。

      第三个请求是提出来的,因为浏览器默认会场请求。 Coco 图标

      抱歉, 收藏家图标和浏览器标签的 Favsymbol. Ico 图标 。

      在上文的服务器程序中,服务器继续使用一个时环来工作。实际上,同时循环的内容也可以根据多两次知识而改为多过程或多两次工作。

      服务器程序仍处于初级阶段, 并允许 Python 调用其他 Python 函数来做更复杂的操作。 例如, 建立了一个时间服务器, 以便服务器能够向客户端提供日期和时间。 也可以使用 Python 自己的数据库实现完整的 LAMP 服务器 。

      套接字袋是底袋。 Python 标准图书馆也提供高级套件, 如 SocketServer、 SimpleHTTPServer、 CGIHTTPServer、 cgi。 这些套件都有助于让套接字包使用更简单。 如果您以前学过套接字, 那么这些包很容易理解 。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/12636.html

          热门文章

          文章分类