Python--TCP/UDP通信

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

  一.客户端与服务端通信原理

1. 服务器端

服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。

  • 创建套接字:首先,服务器需要创建一个套接字(socket),这个套接字将用于监听来自客户端的连接请求。在创建套接字时,需要指定地址族(如IPv4的socket.AF_INET)和套接字类型(对于TCP,使用socket.SOCK_STREAM)。

  • 绑定地址和端口:服务器需要将套接字绑定到一个具体的IP地址和端口号上,以便客户端能够找到并连接到它。

  • 监听连接:服务器使用listen()方法开始监听连接请求。此时,服务器处于等待状态,直到接收到客户端的连接请求。

  • 接受连接:当服务器接收到客户端的连接请求时,它使用accept()方法来接受这个连接。accept()方法会返回一个包含新连接的套接字和客户端地址的元组。服务器将使用这个新连接的套接字来与客户端进行通信。

  • 数据收发:一旦连接建立,服务器和客户端就可以通过各自的套接字发送和接收数据了。数据可以是文本、二进制文件等任何类型的数据。

  • 关闭连接:通信完成后,服务器和客户端都应该关闭它们各自的套接字,以释放系统资源。

2. 客户端

客户端的主要任务是连接到服务器,并与之进行数据交换。

  • 创建套接字:与服务器类似,客户端也需要创建一个套接字,并指定地址族和套接字类型。

  • 连接服务器:客户端使用connect()方法连接到服务器。在调用connect()方法时,需要传入服务器的IP地址和端口号。

  • 数据收发:一旦连接建立,客户端就可以通过套接字发送数据到服务器,并接收服务器发回的数据了。

  • 关闭连接:通信完成后,客户端应该关闭套接字,以释放系统资源。

3. 原理总结

  • TCP三次握手:在TCP通信中,建立连接的过程涉及到三次握手。这确保了双方都能够确认对方的存在和准备接收数据。

  • 数据传输:TCP协议确保了数据的可靠传输。它通过序列号、确认应答、超时重传等机制来确保数据的顺序、完整性和无重复传输。

  • 连接管理:TCP连接是面向连接的,这意味着在数据交换之前必须先建立连接,并在数据交换完成后关闭连接。

  • 错误处理:在通信过程中,可能会遇到各种错误(如网络中断、连接超时等)。Python的socket模块提供了相应的异常处理机制,允许开发者在发生错误时采取适当的措施。

二.Socket模块

套接字(Socket)是一个非常重要的概念,它提供了一个用于网络通信的接口。套接字允许不同计算机上的程序之间进行数据传输。这种通信方式既可以是本机上的程序间的通信,也可以是跨网络的计算机之间的通信

在Python中进行TCP和UDP通信,可以使用内置的socket模块。socket模块提供了用于创建客户端和服务器端套接字的函数和方法。以下是一些常用的TCP通信函数:

服务端

  • 创建一个TCP套接字:
socket.socket(socket.AF_INET, socket.SOCK_STREAM):
  • 将套接字绑定到指定的地址和端口。
socket.bind(IP,端口)
  • 开始监听传入的连接请求。 
socket.listen(同时处理的请求数)
  •  接受一个连接请求,返回一个新的套接字对象,以及客户端的地址
socket.accept()
  • socket.accept() 是服务器在调用 listen() 方法之后等待客户端连接时使用的。这个调用会阻塞程序运行,直到有一个客户端连接到服务器,再执行下面程序
  • 当客户端成功连接到服务器时,accept() 方法会返回一个元组,其中包含两个元素:
    • 第一个元素包含服务端接收客户端连接的IP+端口
    • 第二个元素包含客户端连接的IP+端口

7625db5e63c5477182fe50d6e4f9c065.png

 客户端

  • 连接到服务端的地址和端口
socket.connect(IP,端口)
  •  发送数据到连接的另一端
socket.send(data)
  •  接收来自连接的数据
socket.recv(字节大小)
  •  关闭套接字连接
socket.close()

三.演示案例

服务端

import socket# 创建TCP服务器端
Tcp_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Tcp_Server.bind(("0.0.0.0",8888))  #将IP和端口与套接字绑定
Tcp_Server.listen(10)   #此处设置该进程socket最多处理的连接数是10#等待客户端连接
while True:Tcp_Client,info = Tcp_Server.accept() #阻塞程序运行直到收到客户端连接Tcp_Client.send("成功连接服务器!".encode()) #将发送的数据进行UTF-8编码

客户端 

import socket
Tcp_Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#连接服务器
Server_IP = ("127.0.0.1",8888)
Tcp_Client.connect(Server_IP)  #连接服务器127.0.0.1中端口号为8888的进程socket#接收服务端信息
data_Server = Tcp_Client.recv(1024) #接收服务端的字节数为1024
print(data_Server.decode()) #将接收的二进制数据转换为字符串

总结

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429428.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《使用 LangChain 进行大模型应用开发》学习笔记(四)

前言 本文是 Harrison Chase (LangChain 创建者)和吴恩达(Andrew Ng)的视频课程《LangChain for LLM Application Development》(使用 LangChain 进行大模型应用开发)的学习笔记。由于原课程为全英文视频课…

Gitlab学习(009 gitlab冲突提交)

尚硅谷2024最新Git企业实战教程,全方位学习git与gitlab 总时长 5:42:00 共40P 此文章包含第30p-第p34的内容 文章目录 冲突提交不同人修改不同文件不同人修改同文件的不同区域不同人修改同文件的相同区域 同时变更文件名和文件内容gitLab功能拓展code review代码复…

Mastering Qt 番外 —— 添加源码调试

笔者最近正在尝试深入的学习Qt框架,经常需要明确我经常使用的类底下发生了什么,因此笔者决定仔细研究一下如何进行源码级别的调试 此篇文章将会介绍如何使用Qt Creator这个IDE进行调试。最终效果如下 EasyWay 笔者采用的是这个最简单明了的方式&#xff…

OpenCV基础入门30讲(Python)——第三讲 图像对象的创建与赋值

在OpenCV里,对图像的操作是最为基本的。接下来我们看一下图像对象的创建与赋值。 注:前文介绍过的代码和操作不再重复。 代码 在 main 文件中,先导入新的模块 # 导入 numpy 模块,重命名为 np import numpy as np 再写进以下代…

Cpp类和对象(中)(4)

文章目录 前言一、类的六个默认成员函数二、构造函数构造函数的概念构造函数的特性构造函数的两种分类编译器默认生成构造函数意义及相关问题C11打的补丁 三、析构函数析构函数的概念析构函数的特性验证是否会自动调用析构函数验证析构函数对于内置与自定义类型处理验证先定义后…

LLM - 理解 多模态大语言模型(MLLM) 的 对齐微调(Alignment) 与相关技术 (五)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142354652 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 完备(F…

为什么git有些commit记录,只有git reflog可以看到,git log看不到?

文章目录 原因分析1. git log 只能显示 **可达的** 提交2. git reflog 记录所有引用的变更 常见导致 git log 看不到提交的原因1. git reset 操作2. git rebase 操作3. 分支删除4. git commit --amend5. 垃圾回收(GC)* 如何恢复 git log 看不到的提交&am…

带你0到1之QT编程:十七、Http协议实战,实现一个简单服务器和一个客户端进行http协议通信

此为QT编程的第十七谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点! …

DEPLOT: One-shot visual language reasoning by plot-to-table translation论文阅读

文章链接:https://arxiv.org/abs/2308.01979http://arxiv.org/abs/2212.10505https://arxiv.org/abs/2308.01979 源码链接:https://github.com/cse-ai-lab/RealCQA 启发:two-stage方法可能是未来主要研究方向,能够增强模型可解释…

利用AI增强现实开发:基于CoreML的深度学习图像场景识别实战教程

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

网络安全-利用 Apache Mod CGI

目录 一、环境 二、开始操作 三、总结 一、环境 蚁剑官网拉取 二、开始操作 蚁剑连接 一样终端命令不能执行 可以看到putenv已经禁用 我们开始一下,跳入一个新终端且可以执行命令 我们具体看一下干了什么事情 上传了一个htaccess这个文件的作用是让以后所有ant文…

LAMP架构搭建

目录 LAMP架构搭建 编译安装Apache httpd服务 1、需要的安装包 2、关闭防火墙和核心防护 3、安装环境依赖包 4、配置软件模块 5、编译及安装 6、优化配置文件路径(可不做) 7、添加httpd系统服务 8、修改httpd 服务配置文件 9、浏览器访问验证…

【Pycharm】Pycharm创建Django提示pip版本需要升级

目录 1、现象 2、分析 3、本质 前言:经常使用pycharm创建django、flask等项目时候提示pip版本需要升级,解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时,报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…

linux 基础(一)mkdir、ls、vi、ifconfig

1、linux简介 linux是一个操作系统(os: operating system) 中国有没有自己的操作系统(华为鸿蒙HarmonyOS,阿里龙蜥(Anolis) OS 8、百度DuerOS都有) 计算机组的组成:硬件软件 硬件:运算器&am…

思通数科开源产品:免费的AI视频监控卫士安装指南

准备运行环境: 确保您的服务器或计算机安装了Ubuntu 18.04 LTS操作系统。 按照产品要求,安装以下软件: - Python 3.9 - Java JDK 1.8 - MySQL 5.5 - Redis 2.7 - Elasticsearch 8.14 - FFmpeg 4.1.1 - RabbitMQ 3.13.2 - Minio (…

240912-设置WSL中的Ollama可在局域网访问

A. 最终效果 B. 设置Ollama(前提) sudo vim /etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target[Service] ExecStart/usr/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 Environme…

​OpenAI最强模型o1系列:开启人工智能推理新时代

前不久OpenAI发布全新模型——o1模型,也就是业界说的“草莓模型”,包含三款型号:OpenAI o1、OpenAI o1-preview和OpenAI o1-mini。 其中,OpenAI o1-mini和 o1-preview已经对用户开放使用: OpenAI o1:高级推…

C语言之预处理详解(完结撒花)

目录 前言 一、预定义符号 二、#define 定义常量 三、#define定义宏 四、宏与函数的对比 五、#和## 运算符 六、命名约定 七、#undef 八、条件编译 九、头文件的包含 总结 前言 本文为我的C语言系列的最后一篇文章,主要讲述了#define定义和宏、#和##运算符、各种条件…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…

前端工程化4:从0到1构建完整的前端监控平台

前言 一套完整的前端监控系统的主要部分: 数据上报方式数据上送时机性能数据采集错误数据采集用户行为采集定制化指标监控sdk 监控的目的: 一、数据上报方式 本文的方案是,优先navigator.sendBeacon,降级使用1x1像素gif图片…