当前位置: 首页 > 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;只能通过输入输出看是否能得到我们所需的来…...

利用快马ai一键生成android studio配置脚本,五分钟搭建安卓开发原型环境

利用快马AI一键生成Android Studio配置脚本&#xff0c;五分钟搭建安卓开发原型环境 最近在尝试学习安卓开发&#xff0c;发现Android Studio的安装和配置过程相当繁琐。从下载安装包到配置SDK、创建模拟器&#xff0c;再到初始化项目&#xff0c;每一步都可能遇到各种问题。作…...

Qwen3.5-9B-AWQ-4bit视觉理解效果实测:表格截图OCR准确率与语义概括质量分析

Qwen3.5-9B-AWQ-4bit视觉理解效果实测&#xff1a;表格截图OCR准确率与语义概括质量分析 1. 模型概述 Qwen3.5-9B-AWQ-4bit是一个支持图像理解的多模态模型&#xff0c;能够结合上传图片与文字提示词&#xff0c;输出中文分析结果。这个量化版本特别适合处理图片主体识别、场…...

OpenCore Legacy Patcher实战指南:突破硬件限制的4个关键步骤

OpenCore Legacy Patcher实战指南&#xff1a;突破硬件限制的4个关键步骤 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧Intel Mac面临官方系统支持终止…...

【Axure教程】字母定位选择器

今天教大家用一个中继器制作字母分类定位选择器的原型模板&#xff0c;模版我们用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要在中继器表格对应位置填写选项信息&#xff0c;即可自动生成交互效果&#xff0c;具体效果可以打开下方预览地址体验。 【原型效果…...

终极B站视频下载指南:使用BBDown快速获取高清资源

终极B站视频下载指南&#xff1a;使用BBDown快速获取高清资源 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款强大的命令行式B站视频下载工具&#xff0c;让你轻松保存哔哩…...

用快马AI快速原型:30分钟搭建养龙虾智能养殖管理系统

用快马AI快速原型&#xff1a;30分钟搭建养龙虾智能养殖管理系统 养龙虾作为现代农业养殖项目&#xff0c;管理流程的数字化能显著提升养殖效率。最近我用InsCode(快马)平台快速搭建了一个智能养殖管理系统原型&#xff0c;整个过程比想象中简单很多。下面分享我的实现思路和关…...

GLM-4.1V-9B-Base快速部署:Docker镜像体积优化与启动时间实测对比

GLM-4.1V-9B-Base快速部署&#xff1a;Docker镜像体积优化与启动时间实测对比 1. 模型概述 GLM-4.1V-9B-Base是智谱开源的一款视觉多模态理解模型&#xff0c;专注于图像内容识别与分析任务。该模型具备9B参数规模&#xff0c;在中文视觉理解领域表现出色&#xff0c;能够完成…...

Nginx从专家到小白

文章目录主要用途Nginx 本地路径映射 HTTP 服务搭建文档一、环境信息二、安装步骤2.1 下载 Nginx2.2 解压安装三、配置说明3.1 配置文件路径3.2 完整配置内容3.3 配置项说明四、常用命令4.1 启动 Nginx4.2 停止 Nginx4.3 重新加载配置4.4 查看进程状态4.5 查看端口监听4.6 测试…...

BetterJoy解决Switch手柄PC适配难题:高效无缝的全场景控制器解决方案

BetterJoy解决Switch手柄PC适配难题&#xff1a;高效无缝的全场景控制器解决方案 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https:…...

鼎捷T100二次开发踩坑实录:修改规格后变量不自动生成怎么办?

鼎捷T100二次开发实战&#xff1a;规格修改后变量生成异常深度解析 在鼎捷T100系统的二次开发过程中&#xff0c;规格修改后的变量自动生成机制是开发者日常工作中频繁接触的核心功能之一。这个看似简单的自动化流程&#xff0c;在实际操作中却可能因为各种原因出现异常&#x…...