最后更新:2021-11-01 11:09:47 手机定位技术交流文章
如下图所示,Socket是一个在应用层面与TCP/IP社区连接的中间软件的抽象层。
复杂的TCP/IP组隐藏在Socket界面后面,对于用户来说,只有一套基本的界面,才能使Socket按照特定的协议组织数据。

由下图可理解服务器和客户通信协议:
服务器先将 Socket 初始化, 然后再将其绑定到端口( bind), 监听端口( 听好), 呼叫接受, 等待客户端连接 。
如果客户端初始化了 Socket, 然后连接到服务器, 并且连接成功, 客户端和服务器连接就会形成 。
客户发送数据请求,服务器接收和处理请求,然后向客户提供回复数据,客户阅读数据,最终以互动终端关闭连接。

网络进程之间的通信:
第一个需要回答的问题是,如何仅仅标志一个进程。
TCP/IP聚合帮助我们解决这一问题。
在网络一级,“ip 地址”只能识别网络的主机。
另一方面,传输层的“协议+端口”在主机中可单独识别应用程序(程序)。
这样就可以利用三合一地址(临时地址、协议和港口)和网络进程通信确定网络进程,以便与其他进程进行沟通。
一个插座有四个地址:两个计算机的IP地址和两个流程使用的港口(港口),IP地址用来寻找机器,而港口用来定位流程。
我们可以在互联网上使用计算机作为服务器。
服务器打开自己的端口,被动地等待其他计算机加入。
当其他计算机作为客户在套接头连接到服务器上时,服务器开始为客户服务。
使用标准库中的套接字模块在 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个都连接。
端口号不正确, 因此无法建立连接 。
| 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()
TCP Socket 用于连接上述例子中的两台远程机器。
尽管如此,插座传输过于松散,引起了一些安全和兼容性方面的关切。
有许多应用级协议(如HTTP协议)经常用于界定套接合使用规则和所转让信息的类型。
HTTP协议以请求答复的形式使用TCP锁。
收到请求后,客户向服务器发送文本,服务器向客户发送文本。
交易完成后,TCP套座即告终止。
请求下次被引用时, 将产生新的套接字 。
两份文件基本上都是文字文件,但HTTP协议为两份文本规定了一些格式标准。
A.jpg 测试照片文件存储在 Python 程序文件夹中 。
作为服务器端端,它执行终端上方的 Python 程序 。
作为客户端,将启动另一个浏览器。
浏览器地址栏中的 8000 类型; 或者使用另一台计算机输入服务器的 IP 地址 。
可以看到:

如前所述,服务器根据请求向客户发送两份文本/内容和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。 这些套件都有助于让套接字包使用更简单。 如果您以前学过套接字, 那么这些包很容易理解 。
本文由 在线网速测试 整理编辑,转载请注明出处。