1.tcp基本语法

# ### TCP协议 客户端
import socket
# 1.创建一个socket对象
sk = socket.socket()

# 2.与服务端建立连接
sk.connect( ("127.0.0.1" , 9000) )

# 3.收发数据的逻辑
"""发送的数据类型是二进制字节流"""
"""b开头的字符串是二进制字节流格式,要求字符类型必须是ascii编码"""
sk.send("今天我们学习网络编程".encode()) 

# 接受数据
res = sk.recv(1024)
print(res.decode())
# 4.关闭连接
sk.close()

 

# ### socket 服务端
"""
一发一收是一对,不匹配会导致数据异常
send 发送 recv 接受
"""
import socket

# 1.创建一个socket对象
sk = socket.socket()

# 一个端口绑定多个程序(仅在测试时使用)
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

# 2.在网络中注册该主机(绑定对应的ip和端口号)
""" 默认本地ip : 127.0.0.1  => localhost """
sk.bind(  ("127.0.0.1" , 9000) )
# 3.开启监听
sk.listen()

# 4.三次握手
conn,addr = sk.accept()

# 5.收发数据的逻辑

# 接受数据
"""一次最多接受1024个字节"""
res = conn.recv(1024)
print(res)
print(res.decode())

# 发送数据
conn.send("好好学习,天天向上".encode())


# 6.四次挥手
conn.close()

# 7.退还端口
sk.close()


2.tcp循环发消息

# ### 客户端
import socket

# (1) 创建socket对象
sk = socket.socket()
# (2) 连接服务端
sk.connect( ("127.0.0.1" , 9001) )
# (3) 收发数据的逻辑

while True:
    # 发送数据
    strvar = input("[客户端]请输入您要发送的数据>>>")
    sk.send(strvar.encode())
    
    # 接受数据
    res = sk.recv(1024)
    if res == b"q":
        break
    print(res.decode())
# (4) 关闭连接
sk.close()

 

# ### 服务端
import socket

# (1) 创建socket对象
sk = socket.socket()

# 一个端口绑定多个程序(仅在测试时使用)
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

# (2) 在网络中注册该主机(绑定ip和端口号)
sk.bind(  ("127.0.0.1" , 9001)  )
# (3) 监听端口
sk.listen()
# (4) 三次握手
# conn,addr = sk.accept()
# (5) 收发数据的逻辑

"""
print(conn)
print(addr)
<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9000), raddr=('127.0.0.1', 50176)>
('127.0.0.1', 50176)
"""

while True:
    conn,addr = sk.accept()
    while True:
        # 接受数据
        res = conn.recv(1024)
        print(res.decode())
        
        # 发送数据
        strvar = input("[服务端]请输入您要发送的数据>>>")
        conn.send(strvar.encode())
        
        # 退出
        if strvar == "q":
            break


    # (6) 四次挥手
    conn.close()
    
# (7) 退还端口
sk.close() 

3.udp基本语法

# ### UDP协议 客户端
import socket 

# 1.创建udp对象
sk = socket.socket(type=socket.SOCK_DGRAM)

# 2.收发数据的逻辑
# 发送数据
msg = "你喜欢我么~"
# sendto(  二进制字节流 , ip端口号  )
sk.sendto(   msg.encode() ,  ("127.0.0.1",9000) )

# 接受数据
msg , addr = sk.recvfrom(1024)
print(msg.decode())
print(addr)

# 3.关闭连接
sk.close()
 

# ### UDP协议 服务端
import socket 

# 1.创建udp对象
sk = socket.socket(type=socket.SOCK_DGRAM)

# 2.在网络中注册该主机(绑定ip和端口号)
sk.bind( ("127.0.0.1",9000) )

# 3.收发数据的逻辑
"""udp协议下,默认第一次只能接收数据(没有三次握手,不清楚对方的ip和端口号)"""
# 接受数据
msg , addr  = sk.recvfrom(1024)
print(msg.decode())
print(addr)

# 发送数据
sk.sendto( "我喜欢你个锤子".encode()  , addr )

# 4.关闭连接
sk.close()

4.udp循环发消息

# ### udp 客户端
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)

while True:
    # 发送数据
    strvar = input("[客户端]请输入您要发送的内容>>>")
    sk.sendto( strvar.encode() , ("127.0.0.1",9000) )
    
    # 接受数据
    msg , addr = sk.recvfrom(1024)
    print(msg.decode())
    
sk.close()

 

# ### udp 服务端
import socket 

sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind( ("127.0.0.1",9000) )

while True:
    # 接受数据
    msg , addr = sk.recvfrom(1024)
    print(msg.decode())
    print(addr)
    
    # 发送数据
    strvar = input("[服务端]请输入您要发送的内容>>>")
    sk.sendto( strvar.encode() ,  addr)
sk.close()

5.黏包

# ### 客户端
import socket
import time 

sk = socket.socket()
sk.connect( ("127.0.0.1",9001)  )

time.sleep(2)
# 收发数据的逻辑
res1 = sk.recv(1024)
print(res1.decode() , "<==1===>")
res2 = sk.recv(1024)
print(res2.decode() , "<==2===>")

sk.close()

# ### 服务端
import socket
import time
"""
黏包现象:
    (1)发送端,数据小,时间间隔短,造成黏包
    (2)接收端,没有及时接受数据,可能把多次发送的数据当成一条截取.
"""

sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind( ("127.0.0.1",9001) )
sk.listen()
conn,addr = sk.accept()

# 收发数据的逻辑
conn.send("world,".encode())
time.sleep(1)
conn.send("hello".encode())

conn.close()
sk.close()


 

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

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

相关文章

基于spark的航班价格分析预测及可视化

基于spark的航班价格分析预测及可视化 项目概况 [&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;] 点这里,查看所有项目 [&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&…

每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)

5. 523.连续的子数组和(中等,学习) 523. 连续的子数组和 - 力扣&#xff08;LeetCode&#xff09; 思想 1.给你一个整数数组 nums 和一个整数 k &#xff0c;如果 nums 有一个 好的子数组 返回 true &#xff0c;否则返回 false&#xff1a; 一个 好的子数组 是&#xff1a;…

拉取vue-element-admin

这个错误表明 npm 在尝试通过 SSH 克隆 GitHub 仓库时遇到了权限问题&#xff0c;根本原因是系统无法正确处理中文用户名路径下的 SSH 配置。以下是详细的解决方案&#xff1a; 解决方案 1&#xff1a;使用 HTTPS 代替 SSH&#xff08;推荐&#xff09; 修改 Git 全局配置&…

c语言的数组注意事项

在C语言中&#xff0c;int()[5]和int是两种完全不同的指针类型&#xff0c;理解它们的区别对于正确处理数组和多维数组至关重要。下面详细解释&#xff1a; 1&#xff1a;int*&#xff08;指向整型的指针&#xff09; 含义&#xff1a;指向单个int类型数据的指针典型用法&…

在 NestJS 中优雅使用 TypeORM 进行事务管理

事务管理是数据库操作中至关重要的部分&#xff0c;它能确保一系列操作要么全部成功&#xff0c;要么全部失败。本文将详细介绍在 NestJS 框架中使用 TypeORM 进行事务管理的多种方法。 为什么需要事务管理&#xff1f; 想象一下银行转账场景&#xff1a;从一个账户扣款后&am…

给任意apk内容添加水印

1 有源码给app添加水印 使用java可以适配更多的apk&#xff0c;如果使用koltin一些老的apk就会有适配问题 通过registerActivityLifecycleCallbacks拿到activity对象设置水印 在application里面registerActivityLifecycleCallbacks就行 static class MyActivityLifecycleCallb…

扩展的Fortran在高性能计算(HPC)中助力有限元分析(FEA)、流体力学(CFD)、结构力学、复合材料和增材制造仿真的详细指南【附完整示例代码实现】

Fortran 在高性能计算(HPC)中的仿真应用 本指南深入探讨 Fortran 语言如何在高性能计算(HPC)中助力有限元分析(FEA)、流体力学(CFD)、结构力学、复合材料和增材制造仿真。每部分详细介绍,分析 Fortran 的优势、应用场景和实现细节,并附带完整的 Fortran 模拟代码(含…

Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的跨语言信息检索与知识融合(331)

Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的跨语言信息检索与知识融合&#xff08;331&#xff09; 引言&#xff1a;正文&#xff1a;一、Java 驱动的多语言数据处理平台1.1 分布式多语言语料智能清洗系统1.2 多语言文本分布式存储与索引优化1.3 低资源语言数据…

[2025CVPR]SEEN-DA:基于语义熵引导的领域感知注意力机制

目录 引言 研究背景 方法介绍 核心思想 语义熵&#xff08;Semantic Entropy&#xff09; 语义熵引导的注意力机制 领域感知注意力模块 实验设计 数据集 实现细节 结果与分析 对比实验结果 消融实验 代码实现 结论 引言 领域自适应目标检测&#xff08;Domain …

你的RAG系统安全么?

生成式人工智能&#xff08;GenAI&#xff09;近年来发展迅速&#xff0c;大语言模型成为这一浪潮的核心力量。无论是商业还是开源模型&#xff0c;它们都具备强大的语言理解与生成能力&#xff0c;正广泛应用于内容创作、聊天机器人等场景&#xff0c;让企业更容易落地智能应用…

【2.3 漫画SpringSecurity - 守护应用安全的钢铁卫士】

🔐 漫画SpringSecurity - 守护应用安全的钢铁卫士 📚 目录 记忆口诀可视化图表形象比喻数字记忆实战案例记忆卡片总结诗句面试准备🎪 记忆口诀 🏗️ SpringSecurity核心 - “认证授权过滤链” 认证Authentication确身份,用户名密码验证真 授权Authorization控权限,…

ModbusRTU转Profinet网关在电子天平与PLC系统集成中的应用

ModbusRTU转Profinet网关在电子天平与PLC系统集成中的应用 工业自动化场景中&#xff0c;设备通信协议差异常成为系统集成的隐形壁垒。某精密制造企业近期遇到的奥豪斯电子天平与西门子PLC通讯难题&#xff0c;正是这一矛盾的典型缩影。奥豪斯天平采用ModbusRTU协议&#xff0…

js代码后续

这是一个非常棒的问题&#xff0c;也是每个学完一个系统课程的人都会问的问题。 答案是&#xff1a;不&#xff0c;你没有学完“所有”的 JavaScript 知识&#xff0c;但你已经出色地完成了成为一名合格 JavaScript 开发者的所有“必修课”。 让我用一个比喻来解释&#xff1…

百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署

2025 年 6 月 30 日&#xff0c;百度如期兑现 2 月 14 日的预告&#xff0c;正式开源文心大模型 4.5&#xff08;ERNIE 4.5&#xff09;系列&#xff0c;涵盖 10 款不同参数规模的模型&#xff0c;包括 470 亿参数混合专家&#xff08;MoE&#xff09;模型、30 亿参数 MoE 模型…

Google AI Edge Function Calling: Android 端模型也能调用工具函数

大家好&#xff0c;我是拭心。 上篇文章我们了解了如何在 Android 手机上实现 RAG。这篇文章我们来聊聊端上大模型应用开发的核心概念&#xff1a;Function Calling&#xff08;函数调用能力&#xff0c;简写为 FC&#xff09;。 Function Calling 本质上是让大模型在回答过程…

模型调试实用技巧 (Pytorch Lightning)

【PL 基础】模型调试实用技巧 摘要1. 设置断点2. 快速运行所有模型代码一次3. 缩短 epoch 长度4. 运行健全性检查5. 打印 LightningModule 权重摘要6. 打印输入输出层尺寸 摘要 本文总结了6种实用的模型调试技巧&#xff1a;1&#xff09;通过设置断点逐行检查代码&#xff1b;…

计算机网络(四)网际层IP

目录 一、概念 ​编辑 二、网际层和数据链路层的关系​ 三、IP地址的基础认识 四、IP地址的分类 五、无分类地址CIDR 六、子网掩码 七、为什么要分离网络号和主机号 八、公有IP和私有IP ​编辑 九、IP地址与路由控制 十、IP分片和重组 十一、IPv6 十二、IP协议…

Java--多态--向上转型--动态绑定机制--断点调试--向下转型

目录 1. 向上转型 2. 向下转型 3. java的动态绑定机制&#xff1a; 4. Object类讲解 5. 断点调试 1. 向上转型 提前&#xff1a;俩个对象&#xff08;类&#xff09;存在继承关系 本质&#xff1a;父类的引用指向了子类的对象 语法&#xff1a;父类 类型 引用名 new…

Python爬虫实战:研究urllib 库相关技术

1. 引言 1.1 研究背景与意义 互联网每天产生海量数据,如何高效获取和利用这些数据成为重要研究方向。网页爬虫作为自动获取网络信息的核心技术,在市场调研、舆情分析、学术研究等领域具有广泛应用。Python 凭借其简洁语法和丰富库支持,成为爬虫开发的首选语言。 1.2 相关…

【机器学习赋能的智能光子学器件系统研究与应用】

目前在Nature和Science杂志上发表的机器学习与光子学结合的研究主要集中在以下几个方面&#xff1a; 1.光子器件的逆向设计&#xff1a;通过机器学习&#xff0c;特别是深度学习&#xff0c;可以高效地进行光子器件的逆向设计&#xff0c;这在传统的多参数优化问题中尤为重要。…