当前位置: 首页 > news >正文

【嵌入式学习3】基于python的tcp客户端、服务器

目录

1、tcp客户端

2、tcp服务器

3、服务器多次连接客户端、多次接收信息


1、tcp客户端

"""
tcp:客户端
1. 导入socket模块
2. 创建socket套接字
3. 建立tcp连接(和服务端建立连接)
4. 开始发送数据(到服务端)
5. 关闭套接字
"""
import socket
# 创建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 建立tcp连接
tcp_client_socket.connect(("127.0.0.1",7788))
# 发送数据
tcp_client_socket.send("客户端发送数据成功".encode('utf-8'))
# 开始接收对方回复的数据
recv_data = tcp_client_socket.recv(1024)
print("接收到数据:",recv_data.decode('utf-8'))
# 关闭套接字
tcp_client_socket.close()

2、tcp服务器

"""
TCP服务端:
1. socket创建一个套接字
2. bind绑定ip和port
3. listen使套接字设置为被动模式
4. accept等待客户端的链接
5. recv/send接收发送数据
"""
from socket import *

# 创建socket
tcp_server_socket = socket(AF_INET,SOCK_STREAM)
# 服务IP和端口
address = ('',7788)
# 绑定服务器IP和端口
tcp_server_socket.bind(address)
# 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动
# 参数128表示:允许同时排队等待连接的最大连接数为128
tcp_server_socket.listen(128)
# 如果有c端链接服务器,产生一个新的套接字服务该c端口
# client_sock,ip_port接收tcp_server_socket参数后,tcp返回等待其他客户端链接
client_socket,ip_port = tcp_server_socket.accept()
print("已连接客户端:",ip_port)

# 接收c端数据
recv_data = client_socket.recv(1024)
print("收到数据:%s"%recv_data.decode('utf-8'))

# 发送数据给c端
client_socket.send("服务器端已收到信息".encode('utf-8'))

# 关闭该客户端套接字,如需服务需要重连
client_socket.close()

3、服务器多次连接客户端、多次接收信息

"""
TCP服务端:
1. socket创建一个套接字
2. bind绑定ip和port
3. listen使套接字设置为被动模式
4. accept等待客户端的链接
5. recv/send接收发送数据
"""
from socket import *


tcp_server_socket = socket(AF_INET,SOCK_STREAM)

tcp_server_socket.bind(('127.0.0.1',7788))
tcp_server_socket.listen(128)

while True:
    new_client_socket,ip_port = tcp_server_socket.accept()
    print("已连接新客户端:",ip_port)

    while True:
        recv_data = new_client_socket.recv(1024)
        if recv_data:
            print("收到数据:%s"%recv_data.decode('utf-8'))
            new_client_socket.send("服务器端已收到信息".encode('utf-8'))
        else:
            print("客户端可能断开连接")
            break
    # 关闭和当前客户端的连接,当前客户端不能在进行通信了
    new_client_socket.close()
# 关闭服务器(服务器不再接受新的客户端连接),服务器不再接收新的客户端连接(老的连接,继续服务)
# tcp_server_socket.close()

相关文章:

  • 洛谷题单3-P1075 [NOIP 2012 普及组] 质因数分解-python-流程图重构
  • Mysql 之 Undo Log/Redo Log/Binlog日志实现事务ACID
  • (八)PMSM驱动控制学习---无感控制之滑膜观测器
  • 【Android Studio 下载 Gradle 失败】
  • [oeasy]python082_变量部分总结_variable_summary
  • AWS全球化低延迟架构实战:助力APP快速上架欧美、加拿大、澳大利亚
  • C和C++(list)的链表初步
  • 鸿蒙开发者高级认证编程题库
  • whisper 语音识别的安装与使用
  • 如何判断数据来源缓存还是数据库
  • 什么是扩散模型(Diffusion Models)?为什么它们是图像生成的一大进步?
  • 【CodeReview】Jupiter(Eclipse插件)代码审查工具简介
  • anaconda安装使用+pytorch环境配置(cpu)+pycharm环境配置(详细教程)
  • 第十五届单片机模拟考试III
  • AI朝代应避免AI幻觉:分析与应对策略
  • JavaScript基础--01-JS简介
  • 神经网络与深度学习:案例与实践——第三章(1)
  • jetson orin nano学习(torch+OpenCV+yolov5+)
  • Nginx 基础使用(2025)
  • 大模型-qwen1.5-本地部署
  • 暗红色网站/如何做网站
  • 商城网站建设计划书/北京百度推广投诉电话
  • 洱源网站建设/seo关键词优化软件合作
  • 中企动力销售好做吗/seo点击排名软件营销工具
  • 企业建设门户网站成本如何/seo推广优化平台
  • 网站设计的五大要素/莫停之科技windows优化大师