首页 > 编程语言 >Python TCP通讯教程

Python TCP通讯教程

时间:2024-10-27 17:18:32浏览次数:6  
标签:教程 socket Python TCP client tcp 连接 客户端

文章目录

一、TCP协议简介

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP在IP(Internet Protocol,因特网协议)的基础上,提供了稳定的通信服务。通过TCP协议,两台计算机可以建立连接,并在此连接上进行数据的可靠传输。

二、Python TCP通讯基础

在Python中,进行TCP通讯通常需要使用socket模块。socket是网络编程中的一种抽象概念,它负责在不同主机之间传递数据。Python的socket模块提供了创建套接字、连接服务器、发送和接收数据等功能。

三、TCP服务器端的实现

  1. 创建套接字:使用socket.socket()方法创建一个TCP套接字。

    import socket
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  2. 绑定IP和端口:使用bind()方法将套接字绑定到一个IP地址和端口号上。

    tcp_server.bind(('127.0.0.1', 9999))  # 绑定到本地主机的9999端口
    
  3. 使套接字变为被动连接:使用listen()方法将套接字设置为被动监听状态,并指定最大连接数。

    tcp_server.listen(5)  # 设置最大连接数为5
    
  4. 等待连接:使用accept()方法等待客户端的连接请求,并返回一个新的套接字和客户端的地址信息。

    new_client, new_client_addr = tcp_server.accept()
    print(f"连接地址: {new_client_addr}")
    
  5. 发送和接收数据:使用send()方法发送数据给客户端,使用recv()方法接收来自客户端的数据。

    # 发送数据
    data_to_send = "Hello, client!"
    new_client.send(data_to_send.encode())
    
    # 接收数据
    recv_data = new_client.recv(1024).decode()
    print(f"收到数据: {recv_data}")
    
  6. 关闭连接:使用close()方法关闭与客户端的连接。

    new_client.close()
    

四、TCP客户端的实现

  1. 创建套接字:使用socket.socket()方法创建一个TCP套接字。

    import socket
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  2. 连接服务器:使用connect()方法连接到服务器指定的IP地址和端口号。

    tcp_client.connect(('127.0.0.1', 9999))  # 连接到本地主机的9999端口
    
  3. 发送和接收数据:使用send()方法发送数据给服务器,使用recv()方法接收来自服务器的数据。

    # 发送数据
    data_to_send = "Hello, server!"
    tcp_client.send(data_to_send.encode())
    
    # 接收数据
    recv_data = tcp_client.recv(1024).decode()
    print(f"收到响应: {recv_data}")
    
  4. 关闭连接:使用close()方法关闭与服务器的连接。

    tcp_client.close()
    

五、TCP通讯的扩展功能

  1. 多用户支持:服务器可以同时处理多个客户端的连接。这通常需要使用多线程或异步IO来实现。
  2. 消息广播:服务器可以将消息广播给所有连接的客户端。这需要在服务器端维护一个客户端列表,并遍历该列表发送消息。
  3. 客户端身份验证:服务器可以对客户端进行身份验证,只有通过验证的客户端才能发送消息。这可以在连接建立后进行额外的验证步骤。
  4. 持久化连接:服务器和客户端可以保持连接打开,以便于连续通信。这需要使用心跳机制或长轮询来保持连接活动状态。

六、示例代码

以下是一个简单的TCP服务器和客户端的示例代码:

服务器端代码

import socket
import threading

# 创建一个socket对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定端口号
tcp_server.bind(('127.0.0.1', 9999))

# 设置最大连接数,超过后排队
tcp_server.listen(5)

client_list = []  # 用于存储所有连接的客户端socket

def handle_client(clientsocket):
    data = clientsocket.recv(1024).decode()
    print(f"收到数据: {data}")
    clientsocket.send("已收到您的消息".encode())
    clientsocket.close()
    client_list.remove(clientsocket)

while True:
    # 建立客户端连接
    clientsocket, addr = tcp_server.accept()
    print(f"连接地址: {str(addr)}")
    client_list.append(clientsocket)
    
    # 为每个新连接创建一个线程来处理
    threading.Thread(target=handle_client, args=(clientsocket,)).start()

客户端代码

import socket

# 创建一个socket对象
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务,指定主机和端口
tcp_client.connect(('127.0.0.1', 9999))

# 发送数据
tcp_client.send("Hello, server!".encode())

# 接收响应数据
response = tcp_client.recv(1024).decode()
print(f"收到响应: {response}")

# 关闭连接
tcp_client.close()

七、注意事项

  1. 异常处理:在进行网络编程时,需要考虑到各种可能出现的异常情况,如连接失败、数据传输错误等。因此,在代码中应该添加适当的异常处理机制。
  2. 数据编码:在发送和接收数据时,需要注意数据的编码方式。如果双方使用的编码方式不一致,可能会导致数据乱码或传输失败。在示例代码中,我们使用了UTF-8编码方式,但也可以根据需要选择其他编码方式。
  3. 资源释放:在使用完套接字后,需要及时释放资源,以避免资源泄漏。在示例代码中,我们在每次通信结束后都调用了close()方法来关闭套接字。

通过以上步骤和示例代码,你可以掌握Python TCP通讯的基本知识和实现方法。在实际应用中,你可以根据具体需求对代码进行扩展和优化。

标签:教程,socket,Python,TCP,client,tcp,连接,客户端
From: https://blog.csdn.net/m0_54490473/article/details/143252707

相关文章

  • Python 面向对象编程
    文章目录1.类(Class)和对象(Object)2.封装(Encapsulation)3.继承(Inheritance)4.多态(Polymorphism)5.抽象(Abstraction)面向对象编程(Object-OrientedProgramming,OOP)是Python编程中的一种范式,它允许你定义类(Class)和对象(Object),并通过这些类和对象来组织你的代码。OOP的核心......
  • 一个包含了超过 200 个实用脚本的 Python 脚本库,如文件管理、网络操作、图像处理、文
    前言在日常的工作和生活中,我们经常会遇到一些重复性的任务,如文件管理、网络cao作、图像处理、文本处理等。这些任务虽然简单,但如果频繁手动cao作,不仅耗时耗力,还容易出错。现有的软件虽然能处理一部分问题,但往往功能单一,无法满足多样化的需求。那么,有没有一款软件能够处理这种......
  • Python装饰器 - 具体讲解
    Python装饰器是一种非常有用的功能,它允许我们以不修改原有函数代码的方式,扩展或增强函数的行为。装饰器本质上是一个函数,它接收一个函数作为参数并返回一个新的函数。下面我将详细讲解Python装饰器的概念、用法和实现。1.装饰器的基本概念装饰器的基本语法如下:defdecor......
  • MySQL安装与配置教程
    MySQL安装与配置教程MySQL是一个流行的开源关系型数据库管理系统,广泛用于数据存储和管理。在本教程中,我们将详细介绍如何在Windows、macOS和Linux系统上安装和配置MySQL。一、系统要求在开始安装之前,确保你的系统满足以下基本要求:操作系统:Windows10或更高版本、......
  • python:如何判断一个数是否为素数
    要判断一个数是否为素数,可以使用简单的算法。素数是大于1的自然数,且只能被1和自身整除。下面是一个用Python实现的函数来判断一个数是否为素数:###Python代码示例```pythondefis_prime(n):  ifn<=1:    returnFalse  ifn<=3:    return......
  • MySQL入门到实战详细教程
    MySQL介绍MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,属于Oracle旗下产品,它广泛应用于各种Web应用程序和网站,MySQL使用结构化查询语言(SQL)进行数据的管理和操作。MySQL主要特点开源免费:MySQL是一个开源项目,可以自由下载和使用。跨平台支持:MySQL可以在多......
  • python的开发环境有哪三个
    Python开发环境常见于三种:1、IDLE、2、PyCharm、3、JupyterNotebook。其中,PyCharm因其功能强大和易用性,在开发者中使用尤为广泛。详细分析PyCharm的特点:PyCharm是JetBrains公司开发的一款专门用于Python语言的集成开发环境(IDE)。它拥有代码自动完成、项目管理、强大的调试功能、......
  • 【保姆级教程】从Yolov8训练模型到转化Onnx再转换为Rknn以及板端部署全记录
    目录一、文件准备二、Yolov8训练自己的数据集1.准备数据集2.处理数据3.环境配置4.下载权重文件5.开始训练三、.PT转换为.ONNX四、.ONNX转换为.RKNN1.虚拟机配置2.rknn转换环境配置安装转换环境RKNN转换五、板端部署1.烧录系统2.环境配置3.进行识别六、踩坑笔记Imp......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇你就是网络安全高手了。
       关于我我算是“入行”不久的一个新人安全工作者,为什么是引号呢,因为我是个“半个野路子”出身。早在13年的时候,我在初中时期就已经在90sec、wooyun等社区一直学习、报告漏洞。后来由于升学的压力,我逐渐淡出了安全圈子,也没有继续学习技术。也因为这个原因,高考选择专业时......
  • Python's exec Functions: Execute Dynamically Generated Code
      #encoding:utf-8#版權所有2024©塗聚文有限公司#許可資訊查看:言語成了邀功的功臣,還需要行爲每日來值班嗎?#描述:主、子表單窗體傳值Parent-childformoperations#Author:geovindu,GeovinDu塗聚文.#IDE:PyCharm2023.1python3.11#OS......