文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于Python Socket编程的要点详解

2022-06-02 22:58

关注
目录

前言

在今天的教程中,我们将介绍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 允许位于同一台机器上的进程之间进行通信,或者在不同环境中工作的不同机器上甚至跨越不同大陆的进程之间进行通信。

如何在 Python 中创建 socket 对象?

要创建/初始化socket,我们使用socket.socket() 方法。它在 Python 的socket模块中有定义。其语法如下。


sock_obj = socket.socket(socket_family, socket_type, protocol=0)

在哪里,


import socket   #for sockets

#实例化一个AF_INET, STREAM socket (TCP)

sock_obj = socket.socket(socket.AF_INET, 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 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as err_msg:
    print ('Unable to instantiate socket. Error code: ' + str(err_msg[0]) + ' , Error message : ' + err_msg[1])
    sys.exit();
 
print ('Socket Initialized')

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

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

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

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

服务器套接字方法

客户端套接字可用的方法有哪些?

客户端套接字方法

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

通用套接字方法

到目前为止,我们已经列出了“ 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)
    conn, addr = mySocket.accept()
    print ("Connection from: " + str(addr))

    while True:
        data = conn.recv(1024).decode()
        if not data:
            break
        print ("from connected  user: " + str(data))
                                                
        data = str(data).upper()
        print ("Received from User: " + 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.send(message.encode())
	data = mySocket.recv(1024).decode()

	print ('Received from server: ' + data)
	message = input(" ? ")

    mySocket.close()

if __name__ == '__main__':
    Main()

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

您需要从单独的命令窗口运行这两个模块,或者您可以在两个不同的 IDLE 实例中运行它们。

首先,您将执行服务器模块,然后是客户端。我们已经给出了客户端-服务器程序的完整执行摘要。


Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

 RESTART: C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Server.py 
Connection from: ('127.0.0.1', 50001)
from connected  user: Hello TechBeamers
Received from User: HELLO TECHBEAMERS
 ? Hello Dear Reader
from connected  user: You posts are awesome :)
Received from User: YOU POSTS ARE AWESOME :)
 ? Thank you very much. This is what keeps us motivated.

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
 
 RESTART: C:\Users\Techbeamers\AppData\Local\Programs\Python\Python35\Python-Client.py 
 ? Hello TechBeamers

Received from server: Hello Dear Reader
 ? You posts are awesome :)

Received from server: Thank you very much. This is what keeps us motivated.
 ? q

检查程序兼容性

请注意,我们已经使用 Python 3 版本测试了上述客户端-服务器代码。但是您可以轻松地将上述代码转换为在 Python 2.7 上运行。您需要替换以下代码行。


data = input(" ? ")

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


data = raw_input(" ? ")

我们在以下几点中列出了更多差异。

快速总结——Python Socket 编程

我们希望上面的教程能让您了解有关 Python 套接字编程的新知识。如果您喜欢这篇文章并有兴趣看到更多此类文章,可以看看这里(Github/Gitee) 关注我以查看更多信息,这里汇总了我的全部原创及作品源码

总结

到此这篇关于Python Socket编程要点的文章就介绍到这了,更多相关Python Socket编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯