Python Socket编程:工作流程、示例代码及相关基础知识

目录展示了 Python Socket 编程的工作流程,还有 Python 客户端与服务器的通信示例代码,最后进行了快速总结,即 Python Socket 编程总结。

Python Socket编程:工作流程、示例代码及相关基础知识

在今天的教程里,我们会介绍关于 Python 基础知识的 Python 的 socket 编程。Python 的 socket 接口和 C 以及 Java 是类似的。所以,如果您具备 C 或 Java 的编程背景,那么在 Python 中学习 socket 编程就会容易很多。

在 Python 中使用 socket 较为简单,这使得快速的应用程序开发得以鼓励。因此,不应担忧 Python 是否是你的第一门编程语言,而应感到幸运。

Python 提供了两类 API 库,能够用于 socket 编程。在底层方面,Python 借助“socket”library 来为无连接以及面向连接的网络协议构建客户端和服务器模块。在更高的级别上,你可以运用 ftplib 和 httplib 等库去与应用程序级别的网络协议(例如 FTP 和 HTTP)进行交互。

我们将在这篇文章里讨论专门为 Python socket 编程而设计且被广泛使用的“socket”库。我们会介绍这个库所提供的主要功能,这些功能能够帮助您构建客户端和服务器模块。最后,您可以通过示例代码看到客户端与服务器通信的演示。

socket 是学习 Python socket 编程必须要了解的关键且基础的实体。在本节里,我们阐述了 socket 的概念,还介绍了创建 socket 以及与它进行通信的相关办法。

Python Socket 编程简述

什么是socket?

socket 是一种双向通信的链路端点。这个端点由 IP 地址和端口号组合而成。

对于 Client-Server 通信,需要在一端配置 socket 以发起连接,同时在另一端配置 socket 来监听传入的消息。接着,在一端发送响应,而在另一端也发送响应,以此建立双向通信。

socket 甚至能够让跨越不同大陆的进程进行通信。

如何在 Python 中创建 socket 对象?

创建/初始化 socket 时,我们会用到 socket.socket()方法。这个方法在 Python 的 socket 模块里是有定义的。它的语法情况如下。

创建一个 socket 对象,该对象的家族为 socket_family,类型为 socket_type,协议参数 protocol 被设置为 0,即 sock_obj = socket.socket(socket_family, socket_type, protocol=0) 。

在哪里,

socket_type 用于定义两个端点之间的通信类型,它可以具备以下这些值。协议方面,我们通常会保留该字段或者将该字段设置为零。

import socket#for sockets
创建一个 AF_INET 类型的、STREAM 模式的(TCP)套接字。
创建一个名为 sock_obj 的套接字对象,该套接字使用 IPv4 地址族(socket.AF_INET)和 TCP 流协议(socket.SOCK_STREAM)。
print ('Socket Initialized')

这是创建套接字对象的方式。然而,倘若上述例子无法将套接字实例化,那该怎么办呢?您又将怎样去解决这个错误呢?

您需要把上述代码放置在 Python 的 try 块和 except 块之内。利用 Python 的异常处理机制,您能够对错误的缘由进行追踪。

#管理python套接字编程中的错误
 
import socket#for sockets
import sys  #for exit
 
try:
创建一个套接字,其地址族为 AF_INET,类型为 STREAM(即 TCP 类型)。
创建一个套接字对象 sock_obj,该套接字使用 IPv4 地址族(socket.AF_INET)和 TCP 流协议(socket.SOCK_STREAM)。
如果不是 socket.error 导致的错误,就会执行后续代码;如果是 socket.error 导致的错误,会将错误信息存储在 err_msg 中。
打印(“无法实例化套接字。错误代码:” + 字符串(err_msg[0]) + “,错误消息:” + err_msg[1])
 sys.exit();
 
print ('Socket Initialized')

我们将在接下来的部分解释 Socket 库中那些可用于创建客户端/服务器程序的函数。

Python 的套接字库中有多少种可用的套接字方法?

用于 Python 套接字编程的套接字方法可以被我们分为以下三类。

服务器套接字可用的方法有哪些?

服务器套接字方法

sock_object 进行监听(积压);sock_object 进行接受:客户端套接字具备哪些可用的方法?

客户端套接字方法

Python中可用的通用套接字方法有哪些?

通用套接字方法

sock_object 进行发送操作;sock_object 进行接收并获取发送方地址的操作;sock_object 进行发送到指定地址的操作;sock_object 获取主机名的操作;sock_object 关闭连接的操作。

我们目前已经列出了“socket”库为 Python 套接字编程所提供的所有套接字工具。接着,我们要给您展示实现客户端 - 服务器通信的套接字函数调用的工作流程。请参考以下快照,它阐述了在客户端与服务器之间建立通道所需的每个套接字调用。

Python Socket 编程工作流程

下图描述了客户端和服务器端点的套接字方法的调用顺序。

从上面的流程图中,您可以了解到在 Python 中创建客户端/服务器套接字程序所需要的所有套接字方法。现在,是开始设置真正的 Python 客户端和服务器组件的时候了。

Python 客户端-服务器通信示例代码

客户端-服务器程序将具有以下两个 Python 模块。

检查一下服务器代码。要注意的是,此代码已经在 Python 3 上进行过测试。

Python-Server.py

该服务器模块将向/从客户端发送和接收数据。

Python-Server.py 文件包含一些代码,这些代码用于创建服务器套接字。这个套接字会一直处于等待状态,直到收到来自客户端的请求。

每当客户端连接时,服务器都会接受该连接。

在下面的代码里,我们要求用户去输入他期望传递给客户端的那个响应。

import socket
import time
def Main():
 host = "127.0.0.1"
 port = 5001
 mySocket = socket.socket()
 mySocket.bind((host,port))
 
 mySocket.listen(1)
mySocket 接收连接并返回连接对象 conn 和地址 addr 。
打印("来自: " + str(addr))
 while True:
使用 conn 接收了 1024 字节的数据,然后对其进行解码操作。
  if not data:
break
打印(“来自已连接用户:” + 数据的字符串表示形式)
  
  data = str(data).upper()
打印("从用户接收: " + str(data))
  data = input(" ? ")
  conn.send(data.encode())
  
 conn.close()
 
if __name__ == '__main__':
 Main()

Python-Client.py

在客户端,我们创建一个套接字。接着,使用提供的主机和端口值来连接到服务器。

import socket
def Main():
 host = '127.0.0.1'
 port = 5001
 mySocket = socket.socket()
 mySocket.connect((host,port))
 message = input(" ? ")
 while message != 'q':
mySocket 发送了 message 进行编码后的内容。
mySocket 接收了 1024 字节的数据并进行解码,解码后的数据赋值给了 data
打印(“从服务器接收:” + 数据)
	message = input(" ? ")
 mySocket.close()
if __name__ == '__main__':
 Main()

如何运行客户端-服务器程序?

您需要通过单独的命令窗口来运行这两个模块。您也可以在两个不同的 IDLE 实例中运行它们。

您将先执行服务器模块,接着执行客户端。我们已经给出了关于客户端 - 服务器程序的完整执行情况概述。

Python 3.5.1 ,其版本号为 v3.5.1 ,于 2015 年 12 月 6 日生成 ,时间是 01:54:25 ,使用的是 MSC v.1900 64 位(AMD64)编译器 ,运行在 win32 系统上
输入“copyright”或者“credits”或者“license()”以获取更多信息。
重新启动:C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Server.py
有一个连接来自于 ('127.0.0.1', 50001)
 ? Hello Dear Reader
非常感谢。这就是激励我们的东西。

Python 3.5.1 版本,其版本号为 v3.5.1,生成时间是 2015 年 12 月 6 日 01 时 54 分 25 秒,由 MSC v.1900 64 位(AMD64)编译,运行在 win32 系统上
Type "copyright", "credits" or "license()" for more information.
 
C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Client.py 开始重新启动。
 ? Hello TechBeamers
 ? You posts are awesome :)
 ? q

检查程序兼容性

请注意,我们对上述客户端 - 服务器代码进行了 Python 3 版本的测试。不过,您能够轻松地把上述代码转变为在 Python 2.7 上运行的代码。您需要对以下代码行进行替换。

data = input(" ? ")

对 Python 2.7使用以下 Python输入函数。

data = raw_input(" ? ")

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

32阅读

外国教程python,python编程教学视频

2026年09月02日

27阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读