python socket 网络编程的基本功
python socket逻辑思维整理
UDP发送步骤:
1 、先建立udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
2、利用sendto把数据并指定对端IP和端口,本端端口可以不用指定用自动随机的
udp_socket.sendto(“发送的内容”.encode(“utf-8”), (“192.168.2.121”, 8080))
3、关闭套接字
udp_socket.clise()
UDP接收步骤:
1 、先建立udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
2、绑定本机IP和端口
udp_socket.bind((“192.168.2.121”, 8080))
3、接收数据
recv_data = udp_socket.recvfrom(1024)
4、接收到的是两个数据分开打印出来
recv_message = recv_data[0]
recv_ip_port = recv_data[1]
print(“%s:%s” %(str(recv_ip_port), recv_message.decode(“gbk”)))
5、关闭套接字
udp_socket.clise()
TCP发送步骤:
1、建立套接字
send_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2、指定服务器的IP和端口并连接服务器
send_socket.connect((“192.168.2.121”, 8081))
3、发送数据
send_socket.send(“发送内容”.encode(‘gbk’))
4、关闭套接字
send_socket.close()
TCP接收步骤
1、建立套接字
send_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2、绑定IP和端口
server_socket.bind((“192.168.2.121”, 8081))
3、监听端口
server_socket.listen(128)
4、接收客户端的到来,生成两个结果值:
一个新的套接字new_client和客户端的ip+端口
new_client, address_port = server_socket.accept()
5、用新的套接字接收数据
recv_data = new_client.recv(1024).decode(‘gbk’)
6、关闭新套接字
new_client.close()
7、关闭全局套接字
send_socket.close()
具体代码案例:
UDP发送端:
import socketdef main():udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:print("---------------input 'quit/exit' out process!-------------")print("-----------------------------------------------------------")send_result = input("please input result: ").strip()if send_result == "exit":breakelif send_result == "quit":breakudp_socket.sendto(send_result.encode("utf-8"), ("192.168.2.121", 8080)) udp_socket.close()if __name__ == "__main__":main()
UDP接收端:
import socketdef main():#创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#设置ip和端口ip_port = ("192.168.2.121", 8080)#绑定商品和IPudp_socket.bind(ip_port)#接收数据while True:recv_data = udp_socket.recvfrom(1024)recv_message = recv_data[0]recv_ip_port = recv_data[1]#打印数据print("%s:%s" %(str(recv_ip_port), recv_message.decode("gbk")))#关闭套接字 udp_socket.close()if __name__ == "__main__":main()
UDP发送和接收端:
import socketdef send_data(udp_socket, send_ip, send_port):#发送数据send_result = input("please input result: ").strip() udp_socket.sendto(send_result.encode("gbk"), (send_ip, int(send_port)))def recv_datas(udp_socket):#接收数据recv_data = udp_socket.recvfrom(1024)print("%s:%s===>%s" %(str(recv_data[1][0]), str(recv_data[1][1]),recv_data[0].decode('gbk')))def main():udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)udp_socket.bind(("192.168.2.121", 8082)) send_ip = input('please input ip address: ').strip()send_port = input('please input port: ').strip()while True:print("---------------chat-------------")print("---1:发送---2:接收---3:退出---")option = input("please your select: ").strip() if option == "1":send_data(udp_socket, send_ip, send_port)elif option == "2":recv_datas(udp_socket)elif option == "3":breakelse:print("you input errer!")continueudp_socket.close() if __name__ == "__main__":main()
TCP发送端:
import socketdef main():#建立套接字send_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#指定服务器的IP和端口address = input('ip address: ').strip()ports = int(input('port: ').strip())#连接服务器send_socket.connect((address, ports))#发送数据send_data = input("input mes: ").strip()send_socket.send(send_data.encode('gbk'))#recv_data = send_socket.recv(1024)#print(recv_data)#关闭套接字send_socket.close()if __name__ == "__main__":main()
TCP接收和发送端(带系统命令操作参数返回):
import socket,subprocessdef main():#建立套接字,tcp这个里面的套接字变量只用于绑定和监听server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#绑定IP和端口server_socket.bind(("192.168.2.121", 8081))#监听端口server_socket.listen(128)while True:print('========等待连接==========')#接到到客户端连接后生成一个新的套接字,并接收到客户端的ip和端口address_portnew_client, address_port = server_socket.accept()#程度运行后就一直处于accept阻塞等着客户端来连接#有客户端连接上来了就打印出来连接的客户端ip和端口print('=========客户端已连接上==========') print(address_port)#一直阻塞等客户端发数据过来while True:recv_data = new_client.recv(1024).decode('gbk')#print(recv_data.decode('gbk')) #只要有客户端数据发来,就马上回过去,这步不阻塞 if not recv_data: # 客户在离开时没有数据过来就认为关闭了break#接收客户端发来的内容转为指令result = subprocess.getoutput(recv_data)#把指令在本地执行的内容再返还给客户端,如ipconfig,把查到的ip信息返回new_client.send(result.encode('gbk'))#关闭套接字new_client.close()server_socket.close()if __name__ == "__main__":main()
相关文章:
python socket 网络编程的基本功
python socket逻辑思维整理 UDP发送步骤: 1 、先建立udp套接字 udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 2、利用sendto把数据并指定对端IP和端口,本端端口可以不用指定用自动随机的 udp_socket.sendto(“发送的内容”.encode(“…...

【element-ui】form表单初始化页面如何取消自动校验rules
问题描述:elementUI表单提交页面,初始化页面是获取接口数据,给form赋值,但是有时候这些会是空值情况,如果是空值,再给form表单赋值的话,页面初始化时候进行rules校验会不通过,此时前…...

git 公钥密钥 生成与查看
1.什么是公钥 很多服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到服务器,你以后连接服务器就不用每次都输入用户名和密码了。 很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓…...

数据标注对新零售的意义及人工智能在新零售领域的应用?
数据标签对于新零售至关重要,因为它构成了训练和部署人工智能(AI)和机器学习(ML)模型的基础。在新零售的背景下,数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后,这些…...

命令模式-请求发送者与接收者解耦
去小餐馆吃饭的时候,顾客直接跟厨师说想要吃什么菜,然后厨师再开始炒菜。去大点的餐馆吃饭时,我们是跟服务员说想吃什么菜,然后服务员把这信息传到厨房,厨师根据这些订单信息炒菜。为什么大餐馆不省去这个步骤…...

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...
3、JSON数据的处理
3.1 介绍 JSON数据 Spark SQL can automatically infer the schema of a JSON dataset and load it as a DataFrame Spark SQL能够自动将JSON数据集以结构化的形式加载为一个DataFrame This conversion can be done using SparkSession.read.json on a JSON file 读取一个JSO…...

8月5日上课内容 nginx的优化和防盗链
全部都是面试题 nginx的优化和防盗链 重点就是优化: 每一个点都是面试题,非常重要,都是面试题 1、隐藏版本号(重点,一定要会) 备份 cp nginx.conf nginx.conf.bak.2023.0805 方法一:修改配…...
网络爬虫请求头中的Referer和User-Agent与代理IP的配合使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EJgMcgK-1691050515642)(https://cdn.nlark.com/yuque/0/2023/png/1313150/1691048724422-2a76d7b8-3ec3-48b7-9aec-d609d09b16d4.png#averageHue%2385b0a7&clientIdu3856fd20-7701-4&fromui&…...
RabbitMQ 生产者-消息丢失 之 场景分析
生产者-消息丢失 之 场景分析 生产者消息丢失的场景消息无法到达RabbitMQ连接断开信道关闭 RabbitMQ无法将消息入队交换机不存在无匹配队列 消息过期丢失消息丢失场景对比 生产者消息丢失的场景 生产者发送消息的流程如下:首先生产者和RabbitMQ服务器建立连接&…...

Hyper实现git bash在windows环境下多tab窗口显示
1.电脑上安装有git bash 下载链接:https://gitforwindows.org/ 安装Hyper 下载链接:官网 https://hyper.is/ 或者在百度云盘下载: https://pan.baidu.com/s/1BVjzlK0s4SgAbQgsiK1Eow 提取码:0r1f 设置 打开Hyper,依次点左上角-&g…...

Matlab的信号频谱分析——FFT变换
Matlab的信号频谱分析——FFT变换 Matlab的信号频谱分析 FFT是离散傅立叶变换的快速算法,可以将一个时域信号变换到频域。 有些信号在时域上是很难看出什么特征的。但是如果变换到频域之后,就很容易看出特征了。 这就是很多信号分析采用FFT变换的原因…...

如何从 Android 设备恢复已删除的文件?
从 Android 设备恢复已删除的文件很简单,但您需要了解内部恢复和SD 卡恢复之间的区别。 目前销售的大多数 Android 设备都配备了 SD 卡插槽(通常为 microSD),可以轻松添加额外的存储空间。该存储空间可用于存储照片、视频、文档&a…...

servlet生命周期和初始化参数传递
servlet生命周期和初始化参数传递 1、servlet生命周期 只有第一次访问才会初始化,之后访问都只执行service中的。 除非tomcat关闭重新启动: 2、初始化参数传递...

dvwa靶场通关(十一)
第十一关:Reflected Cross Site Scripting (XSS) low 这一关没有任何防护,直接输入弹窗 <script>alert(xss)</script> 打开网页源代码, 从源代码中我们可以看到,前面是输出的第一部分Hello,我们输入的脚…...

【Spring】使用注解存储Bean对象
目录 一、配置扫描路径(使用注解的方式存对象的前提) 二、使用类注解存储Bean对象 1、使用五大类注解存储Bean对象 2、为什么要这么多的类注解? 2.1、五大类注解之间的关系 3、获取Bean对象时的默认命名规则 三、使用方法注解来存储…...

怎么维护好自己的电脑
你的电脑已经成为你工作、学习、娱乐的最佳工具之一,但是如果你不做好电脑维护工作,就可能面临着电脑变慢、蓝屏、崩溃等问题。在这篇文章中,我们将介绍10个电脑维护步骤,让你的电脑更加稳定! 为什么需要电脑维护&…...

vscode中无法使用git解决方案
1 首先查看git安装目录 where git 2 找到bash.exe 的路径 比如:C:/Users/Wangzd/AppData/Local/Programs/Git/bin/bash 3 找到vscode的配置项setting.json 4 添加 "terminal.integrated.shell.windowns": "C:/Users/Wangzd/AppData/Local/Pr…...
MybatisPlus-CRUD,不带条件构造器的常用方法
mapper层 Repository public interface UserMapper extends BaseMapper<User> BaseMapper中封装好了增删改查的方法 后面直接调用就好了 测试类 SpringBootTest public class CrudTest {Autowiredprivate UserMapper userMapper;//新增Testpublic void insert(){//没…...

软件测试面试【富途面经分享】
目录 一面面经(1h) 二面面经 一面面经(1h) 一、对白盒黑盒灰盒测试的理解 答: 1、黑盒测试就当整个程序是个黑盒子,我们看不到它里面做了什么事情,只能通过输入输出看是否能得到我们所需的来…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...