使用套接字在python中设置internet服务器

作为对网络客户端教程的补充,本教程展示了如何用Python实现一个简单的web服务器。可以肯定的是,这并不能替代Apache或Zope。在Python中还可以使用BaseHTTPServer等模块实现更健壮的web服务。此服务器专门使用套接字模块。...

01

插座简介

作为对网络客户端教程的补充,本教程展示了如何用Python实现一个简单的web服务器。可以肯定的是,这并不能替代Apache或Zope。在Python中还可以使用BaseHTTPServer等模块实现更健壮的web服务。此服务器专门使用套接字模块。

您会记得,套接字模块是大多数Python web服务模块的主干。与简单网络客户机一样,使用它构建服务器可以透明地演示Python中web服务的基础知识。BaseHTTPServer本身导入套接字模块以影响服务器。

02

运行服务器

通过回顾,所有网络事务都发生在客户端和服务器之间。在大多数协议中,客户端请求特定的地址并接收数据。

在每个地址中,可以运行多个服务器。限制在硬件上。有了足够的硬件(RAM、处理器速度等),同一台计算机可以同时充当web服务器、ftp服务器和邮件服务器(pop、smtp、imap或以上所有功能)。每个服务都与一个端口相关联。端口已绑定到套接字。服务器侦听其关联端口,并在该端口上收到请求时提供信息。

03

通过套接字进行通信

因此,要影响网络连接,您需要知道主机、端口以及该端口上允许的操作。大多数web服务器在端口80上运行。但是,为了避免与已安装的Apache服务器发生冲突,我们的web服务器将在端口8080上运行。为了避免与其他服务冲突,最好将HTTP服务保留在端口80或8080上。这是最常见的两种。显然,如果使用这些端口,您必须找到一个打开的端口,并向用户发出更改警报。

与网络客户端一样,您应该注意这些地址是不同服务的公共端口号。只要客户端在正确地址的正确端口上请求正确的服务,通信仍然会发生。例如,谷歌的邮件服务最初并不使用公共端口号,但由于用户知道如何访问自己的帐户,因此用户仍然可以获得他们的邮件。

与网络客户端不同,服务器中的所有变量都是硬连线的。任何期望持续运行的服务都不应该在命令行中设置其内部逻辑的变量。唯一的变化是,出于某种原因,您希望偶尔在不同的端口号上运行服务。但是,如果是这种情况,您仍然可以观察系统时间并相应地更改绑定。

因此,我们唯一的进口是插座模块。

导入套接字

接下来,我们需要声明几个变量。

04

主机和端口

如前所述,服务器需要知道要关联到的主机和要侦听的端口。出于我们的目的,我们将使该服务适用于任何主机名。

host = '' 端口=8080

如前所述,端口为8080。请注意,如果您将此服务器与网络客户端一起使用,则需要更改该程序中使用的端口号。

05

创建套接字

无论是请求信息还是提供信息,为了访问互联网,我们需要创建一个套接字。此调用的语法如下所示:

<variable>=socket.socket(<family>,<type>)

公认的插座系列包括:

  • AF_INET:IPv4协议(TCP和UDP)
  • AF_INET6:IPv6协议(TCP和UDP)
  • AF_UNIX:UNIX域协议

前两个显然是互联网协议。在这些家庭中,任何通过互联网传播的东西都可以访问。许多网络仍然没有在IPv6上运行。因此,除非您知道其他情况,否则默认为IPv4并使用AF_INET是最安全的。

套接字类型是指通过套接字使用的通信类型。五种插座类型如下所示:

  • SOCK_流:面向连接的TCP字节流
  • SOCK_DGRAM:数据报的UDP传输(不依赖客户机-服务器确认的自包含IP数据包)
  • 未加工的插座:未加工的插座
  • SOCK_RDM:用于可靠的数据报
  • SOCK_SEQPACKET:通过连接顺序传输记录

到目前为止,最常见的类型是SOCK_STEAM和SOCK_DGRAM,因为它们在IP套件的两个协议(TCP和UDP)上运行。后三种情况更为罕见,因此可能并不总是得到支持。

因此,让我们创建一个套接字并将其分配给一个变量。

c=socket.socket(socket.af_inet,socket.sock_stream)

06

设置套接字选项

创建套接字之后,我们需要设置套接字选项。对于任何套接字对象,都可以使用setsockopt()方法设置套接字选项。语法如下:

socket_object.setsockopt(level,option_name,value)出于我们的目的,我们使用以下行: c、 setsockopt(socket.sol_socket,socket.so_reuseaddr,1) 术语“级别”指的是期权类别。对于套接字级别选项,请使用sol_socket。对于协议编号,可以使用ipproto_ip。sol_套接字是套接字的常量属性。作为每个级别的一部分,具体哪些选项可用取决于您的操作系统以及您使用的是ipv4还是ipv6。 linux和相关unix系统的文档可以在系统文档中找到。microsoft用户的文档可以在msdn网站上找到。在撰写本文时,我还没有找到有关套接字编程的mac文档。由于mac大致基于bsd unix,因此它可能会实现一整套选项。 为了确保此套接字的可重用性,我们使用so_reuseaddr选项。可以限制服务器仅在开放端口上运行,但这似乎是不必要的。但是,请注意,如果在同一端口上部署两个或多个服务,其影响是不可预测的。人们无法确定哪个服务将接收哪个信息包。 最后,值的“1”是程序中已知套接字请求的值。通过这种方式,程序可以以非常细微的方式监听套接字。

07

将端口绑定到套接字

创建套接字并设置其选项后,我们需要将端口绑定到套接字。

c、 绑定((主机、端口))

绑定完成后,我们现在告诉计算机等待并侦听该端口。

c、 听(1)

如果我们想向呼叫服务器的人提供反馈,现在可以输入print命令以确认服务器已启动并正在运行。

08

处理服务器请求

设置好服务器后,我们现在需要告诉Python在给定端口上发出请求时应该做什么。为此,我们通过其值引用请求,并将其用作持久while循环的参数。

当发出请求时,服务器应接受该请求并创建一个文件对象与之交互。

while 1: c锁,caddr=c.接受()cfile=csock.makefile('rw',0)

在这种情况下,服务器使用相同的端口进行读取和写入。因此,makefile方法被赋予一个参数“rw”。缓冲区大小的null长度只是让文件的该部分动态确定。

09

向客户端发送数据

除非我们想要创建单个操作服务器,否则下一步是从文件对象读取输入。当我们这样做时,我们应该小心地去掉输入的多余空格。

line=cfile.readline().strip()

请求将以操作的形式出现,后面是页面、协议和正在使用的协议版本。如果希望为网页提供服务,则将此输入拆分以检索请求的页面,然后将该页面读取为变量,然后将该变量写入套接字文件对象。在博客中可以找到将文件读入词典的功能。

为了使本教程更能说明如何使用socket模块,我们将放弃服务器的这一部分,而是展示如何细微差别地表示数据。在程序中输入接下来的几行。

cfile.write('HTTP/1.0 200 OK\n\n') cfile.write('<html><head><title>欢迎%s!</title></head>'%(str(caddr)))cfile.write(“<body><h1>跟随链接…</h1>”)write('服务器需要做的就是')write('将文本传递到套接字')write('它提供链接的html代码')cfile.write('然后web浏览器将其转换。<br><br><br><br>)cfile.write(“<font size=“7”><center><a href=”http://python.about.com/index.html“>单击我!</a></center></font>”)cfile.write(“<br><br>您请求的措辞是:“%s”%”(第行))cfile.write(“</body></html>”)

10

最终分析和关闭

如果要发送网页,第一行是将数据引入web浏览器的好方法。如果不使用它,大多数web浏览器将默认呈现HTML。但是,如果其中包括“OK”,则“OK”后面必须跟两个新行字符。这些用于区分协议信息和页面内容。

第一行的语法可能是协议、协议版本、消息编号和状态。如果你曾经访问过一个移动了的网页,你可能会收到404错误。这里的200条信息就是肯定的信息。

剩下的输出只是一个网页,分成几行。您将注意到,服务器可以编程为在输出中使用用户数据。最后一行反映了服务器接收到的web请求。

最后,作为请求的关闭动作,我们需要关闭文件对象和服务器套接字。

cfile.close() csock.close()

现在以可识别的名称保存此程序。在您使用“python program_name.py”调用它之后,如果您编程了一条消息以确认服务正在运行,则应该将其打印到屏幕上。然后,终端似乎会暂停。一切都是应该的。打开web浏览器并转到localhost:8080。然后您应该看到我们给出的write命令的输出。请注意,为了节省空间,我没有在这个程序中实现错误处理。然而,任何发布到“野生”环境中的程序都应该。

  • 发表于 2021-09-12 09:18
  • 阅读 ( 191 )
  • 分类:编程

你可能感兴趣的文章

如何在windows中设置数据使用限制

... 打开设置(键盘快捷键Win+I)。转到网络和internet数据使用。 在“显示设置”的下拉框中,将显示您当前的Wi-Fi网络。如果有多个,请从下拉列表中选择正确的一个。 在“数据限制”区...

  • 发布于 2021-03-11 18:12
  • 阅读 ( 227 )

如何在outlook中设置“外出”邮件

... 使用Office 365时,使用自动答复很容易,Outlook.com(以前称为Hotmail)或Exchange帐户: ...

  • 发布于 2021-03-12 02:18
  • 阅读 ( 233 )

如何在linux中设置raspberry pi

它可以作为媒体中心,机器人的大脑,网络服务器,甚至是数码相框。小树莓皮似乎知道很少的限制。。。你甚至可以在上面运行旧的Windows游戏而不需要仿真! ...

  • 发布于 2021-03-13 11:04
  • 阅读 ( 235 )

如何在windows10中设置vpn

...个公司或组织会维护一个私有网络,其中包含大量的内部服务器和文件,这些服务器和文件只能使用同一大楼中的公司计算机访问。VPN允许您从家庭计算机或其他远程计算机访问这些服务器和文件。 通过专用网络...

  • 发布于 2021-03-22 03:46
  • 阅读 ( 295 )

什么是通道连接?一种让你的网速翻倍的方法

... 此网页的各种组件(如文本和图像)通过套接字(作为数据包)传递。将套接字视为从服务器延伸到您的信息管道。如果插座是一根管子,那么包就是流过它的液体。 ...

  • 发布于 2021-03-22 14:34
  • 阅读 ( 207 )

如何在Windows10中设置默认打印机

... 要管理打印机选项,请使用Win+I快捷方式或“开始”菜单上的图标打开“设置”应用程序。出现后,单击设备并从左侧选择打印机和扫描仪。 ...

  • 发布于 2021-03-28 01:28
  • 阅读 ( 335 )

excel中的钱是什么?您是如何开始的?

...新信息,请随时单击窗格顶部的“更新”(只需确保您有internet连接)。 excel选项卡中的钱 有关Excel中的Money功能的摘要,或查找有关安装过程的任何问题的答案,请单击工作簿中的“欢迎”或“说明”选项卡。 单击“快照”...

  • 发布于 2021-04-01 07:25
  • 阅读 ( 184 )

如何使用linux lsof命令

...流。 许多其他系统组件接受或生成字节流,例如键盘、套接字连接、打印机和通信进程。因为它们要么接受、生成,要么接受并生成字节流,所以这些设备可以在非常低的级别上进行处理,就好像它们是文件一样。 这个设计概...

  • 发布于 2021-04-03 10:30
  • 阅读 ( 170 )

如何使用amazon echo控制kodi media center

...一点设置,一开始看起来非常吓人。您将需要创建一个web服务器,从GitHub推送一些代码,并从命令行执行一些工作,但您不需要成为一名程序员就可以启动并运行它。Ipson已经完成了几乎所有的繁重工作,你只需要复制他的代码...

  • 发布于 2021-04-07 13:04
  • 阅读 ( 171 )

如何为(几乎)任何电子邮件帐户创建休假信息

...户或支持响应者的雅虎帐户。 您已连接到Microsoft Exchange服务器,可以使用外出助手。 您的POP3/IMAP电子邮件帐户不支持响应者,可能来自您的internet提供商或其他服务。 我们将向您展示如何在Gmail、Yahoo、Windows10Mail(针对Microsoft...

  • 发布于 2021-04-08 05:14
  • 阅读 ( 207 )
mk138011
mk138011

0 篇文章

相关推荐