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

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)模型的基础。在新零售的背景下,数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后,这些…...

命令模式-请求发送者与接收者解耦

去小餐馆吃饭的时候,顾客直接跟厨师说想要吃什么菜,然后厨师再开始炒菜。去大点的餐馆吃饭时,我们是跟服务员说想吃什么菜,然后服务员把这信息传到厨房,厨师根据这些订单信息炒菜。为什么大餐馆不省去这个步骤&#xf…...

【雕爷学编程】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靶场通关(十一)

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

【Spring】使用注解存储Bean对象

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

怎么维护好自己的电脑

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

vscode中无法使用git解决方案

1 首先查看git安装目录 where git 2 找到bash.exe 的路径 比如&#xff1a;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(){//没…...

软件测试面试【富途面经分享】

目录 一面面经&#xff08;1h&#xff09; 二面面经 一面面经&#xff08;1h&#xff09; 一、对白盒黑盒灰盒测试的理解 答&#xff1a; 1、黑盒测试就当整个程序是个黑盒子&#xff0c;我们看不到它里面做了什么事情&#xff0c;只能通过输入输出看是否能得到我们所需的来…...

深度学习在微纳光子学中的应用

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

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 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是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...