Python网络编程之Socket通信简单实

简介: Python网络编程之Socket通信简单实

Socket是一个TCP/IP网络通讯的抽象层,提供一系列的数据交互操作接口,这样开发者可以不再关注于具体的协议处理细节,从而快速的让自己的程序实现网络数据交互。

简单来说,程序进程之间需要通过socket进行通信,它类似于一个插件,所有进程必须进行关联才能工作。只要是与网络相关的应用程序,都必须使用socket。

img

Python的Socket编程中一般分为TCP和UDP两种通讯协议,而socket是基于C/S架构的,所以socket网络编程,需要编写客户端程序和服务端程序。

TCP通信流程

img
客户端流程

  1. 初始化socket()
  2. 使用ip和端口号connect()连接服务器
  3. 使用recv()接收数据,send()发送数据与服务器进行交互
  4. 关闭socket()

服务端流程

  1. 初始化socket()
  2. 使用bind()绑定ip和端口号
  3. 使用listen()监听消息
  4. 获取客户端的套接字地址accept()
  5. 使用recv()接收数据,send()发送数据与客户端进行交互
  6. 关闭socket()

在Python中使用socket.socket类即可实现TCP程序开发socket.socket(AddressFamily, Type)

参数说明:

  • AddressFamily 表示IP地址类型, 分为TPv4和IPv6
  • Type 表示传输协议类型

常用方法如下:

函数 描述
socket() 获取socket类对象
bind((hostname, port)) 在指定主机的端口绑定监听
listen() 在绑定端口上开启监听,参数表示最大等待建立连接的个数
accept() 等待客户端连接,连接后返回客户端地址
send(data) 发送数据,data 是二进制数据
recv(buffer) 表示接收数据, buffersize 是每次接收数据的长度
close() 关闭套接字连接
connect((hostname, port)) 设置要连接的主机名称与端口号

使用Python实现TCP通信代码:

服务器端:

import socket
# 创建一个socket对象,默认TCP套接字
s = socket.socket()
# 绑定端口
s.bind(('127.0.0.1',9006))
# 监听端口
s.listen(5)
print("正在连接中……")

# 建立连接之后,持续等待连接
while 1:
    # 阻塞等待连接
    sock,addr = s.accept()
    print(sock,addr)
    # 一直保持发送和接收数据的状态
    while 1:
        text = sock.recv(1024)
        # 客户端发送的数据为空的无效数据
        if len(text.strip()) == 0:
            print("服务端接收到客户端的数据为空")
        else:
            print("收到客户端发送的数据为:{}".format(text.decode()))
            content = input("请输入发送给客户端的信息:")
            # 返回服务端发送的信息
            sock.send(content.encode())

    sock.close()

客户端:

import socket
# 创建一个socket对象
s1 = socket.socket()
s1.connect(('127.0.0.1', 9006))
# 不断发送和接收数据
while 1:
    send_data = input("客户端要发送的信息:")
    # socket传递的都是bytes类型的数据,需要转换一下
    s1.send(send_data.encode())
    # 接收数据,最大字节数1024,对返回的二进制数据进行解码
    text = s1.recv(1024).decode()
    print("服务端发送的数据:{}".format(text))
    print("------------------------------")

img

因为网络通信需要通过ip地址找到网络中的设备,通过端口号找到对应进程的端口,所以客户端ip端口必须和客户端ip端口保持一致。

当客户端和服务端建立连接后,退出程序后端口号不会立即释放,需要等待大概1-2分钟。可以通过设置端口复用解决(tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

上面的代码实现了TCP服务端程序只能服务于一个客户端,如果服务端程序要和多个客户端通信,则可以使用多线程或者socketserver模块,socketserver是socket的再封装,从而简化socket网络编程的方法。

更多关于python socket的使用,可以查看官方文档学习:

https://docs.python.org/zh-cn/3/library/socketserver.html#module-socketserver

https://docs.python.org/zh-cn/3/library/socket.html

https://docs.python.org/zh-cn/3/howto/sockets.html

目录
相关文章
|
28天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
58 2
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
88 6
|
24天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
72 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
29天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
53 3
|
1月前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
181 1
|
1月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
65 4
|
1月前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
48 1
|
1月前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
24 1
|
1月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
31 1
|
1月前
|
网络协议 调度 开发者
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第27天】本文介绍了Python网络编程中的Twisted框架,重点讲解了其异步IO处理机制。通过反应器模式,Twisted能够在单线程中高效处理多个网络连接。文章提供了两个实战示例:一个简单的Echo服务器和一个HTTP服务器,展示了Twisted的强大功能和灵活性。
42 0