python 网络通信

news2024/9/24 6:20:20

目录

  • 一、ip 地址
    • 1、ip 地址的分类
      • A类
      • B 类
      • C 类
      • 私有地址
      • 公有地址
      • 特殊 ip
  • 二、端口 port
    • 1、知名端口
    • 2、动态端口
  • 三、udp 通信
    • 1、socket
    • 2、bind 绑定
    • 3、网络通信过程
    • 4、udp 聊天室
    • 5、udp 广播
  • 四、tcp 通信
    • 1、对比 udp
    • 2、特点
    • 3、tcp 客户端
    • 4、tcp 服务器
    • 5、文件下载器
    • 6、tcp 的三次握手
    • 7、tcp 的四次挥手


一、ip 地址

  • 作用:电脑的唯一标记,不能重复
  • dest ip: 目的 ip
  • srp: 源 ip

1、ip 地址的分类

  • ipv4:192.168.14.60
  • ipv6:fe80::250::56ff:fe32:8cd0/64

A类

  1. 网络号:192.168.14
  2. 主机号:60

B 类

  1. 网络号:192.168
  2. 主机号:14.60

C 类

  1. 网络号:192
  2. 主机号:168.14.60

私有地址

不能上互联网

公有地址

能直接上网

特殊 ip

  • 127.0.0.1~127.255.255.255用于回路测试
  • 127.0.0.1可以代表本机IP地址

二、端口 port

  • 进出网络程序的通道
  • 用端口号标记电脑上运行的程序
  • 整数,0~65535
  • 进程:运行中的程序

1、知名端口

  • 特殊程序
  • 0~1023
  • 22:ssh 远程登陆 Linux 系统
  • 80:网站一般用的端口
  • 69:下载文件

2、动态端口

  • 普通程序
  • 1024~65535
  • 查看端口状态
    • netstat - t/u

三、udp 通信

  • 用户数据报协议
  • 快速
  • 易丢失

1、socket

  • 协议:传送数据的格式
  • udp:只负责发送,不管是否被接收
  • tcp:每发送一个数据,接收方需回送一个响应
import socket

# 创建 udp 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ipv4, udp

# 获取需要发送的数据
msg = input("输入要发送的数据:")

# 发送数据
s.sendto(msg.encode("utf-8"), ("ip", 8080)) # 内容,(ip, 端口)

# 接收数据并打印
recv_msg = s.recvfrom(1024) # 堵塞,若没有接收到数据,卡在这个位置
print("%s(%d)>>>%s" % (recv_msg[1][0], recv_msg[1][1], recv_msg[0].decode("utf-8"))) # gbk

# 关闭套接字
s.close()

2、bind 绑定

  • 固定端口
  • 发送信息之前
# 绑定一个 ip 和端口
local_info = ("ip", 7788) # 本地信息
s.bind(local_info)

3、网络通信过程

4、udp 聊天室

import socket

def send_msg(s):
    # 获取发送的数据
    send_content = input("输入发送的内容:")
    # 获取对方 ip
    send_ip = input("目标 ip:")
    # 获取对方端口
    send_port = int(input("目标端口:"))
    # 发送数据
    s.sendto(send_content.encode("utf-8"), (send_ip, send_port))

def recv_msg(s):
    recv_content, client_info = s.recvfrom(1024)
    print(">>>%s(%s):%s" % (client_info[0], client_info[1], recv_content.decode("utf-8")))

def main():
    # 创建套接字
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定
    s.bind(("", 7890))

    # 功能选择
    while True:
        print("1: 发送数据")
        print("2: 接收数据")
        print("3: 退出")
        op = input("要进行的操作序号:")

        if op == "1":
            send_msg(s)
        elif op == "2":
            recv_msg(s)
        elif op == "3":
            break

    s.close()

if __name__ == '__main__':
    main()

5、udp 广播

s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

四、tcp 通信

  • 传输控制协议
  • 稳定,很少丢失
  • 较慢

1、对比 udp

  • 需要先建立链接
  • TCP 每次发送一个数据包,对方都要确认,保证数据准确到达对方
  • TCP 通信过程中,通道占用
  • TCP 只需要建立一次链接

2、特点

  1. 面向连接,无法广播
  2. 发送-应答机制
  3. 超时重传
  4. 错误校验
  5. 流量控制和阻塞管理

3、tcp 客户端

import socket

# 创建 tcp 套接字
client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ipv4, tcp

# 链接服务器
client_s.connect(("ip", 8080))

# 发送数据
client_s.send("hello world".encode("utf-8"))

# 关闭套接字
client_s.close()
  • 发送、接收数据:

4、tcp 服务器

  • 为别的软件提供服务的软件
  • 服务器一般都需要绑定
  • 客户端一般不绑定
import socket

# 创建 tcp 套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建的套接字是用来等待客户端链接用的

# 绑定本地信息
server_s.bind(("", 7890))

# 将套接字由主动链接模式改为被动模式
server_s.listen(128)

# 等待客户端的链接
# accept 返回的套接字用来与客户端通信
new_s, client_info = server_s.accept() # 默认堵塞,直到一个 tcp 客户端链接之后解除
print(client_info)

# 接收/发送数据
while True:
    recv_content = new_s.recv(1024) # 若 recv 解堵塞,说明:客户端发过来数据/客户端关闭了通信。若收到的数据长度为 0,意味着断开了链接
    if len(recv_content) != 0:
        print(recv_content)
    else:
        new_s.close()
        break

server_s.close()

5、文件下载器

  • 客户端:
import socket

# 创建 tcp 套接字
client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 链接 tcp 服务器
server_ip = input("输入服务器的 ip:")
server_port = int(input("输入服务器的端口:"))
client_s.connect((server_ip, server_port))
print("链接服务器(%s)成功" % server_ip)

# 发送要下载的文件的名字的字符串
download_file_name = input("输入要下载的文件的名字")

# recv 接收
client_s.send(download_file_name.encode("utf-8"))

# 存储
content = client_s.recv(1024)
print("接收到的数据:")
print(content.decode("gbk"))

# 将数据存储到一个文件中
with open(download_file_name, "w") as f:
    f.write(content.decode("gbk"))
    print("下载文件(%s)成功" % download_file_name)

# 关闭套接字
client_s.close()
  • 服务器:
import socket

# 创建 tcp 套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定本地信息
port = 7890
server_s.bind(("", port))

# 监听模式
server_s.listen(128)
print("等待客户端链接,端口:%d" % port)

# 等待客户端链接
new_s, client_info = server_s.accept()
print("已经链接(%s)" % str(client_info))

# 接收客户端要下载的文件字
download_file_name = new_s.recv(1024).decode("utf-8")

# 找到文件名,读取内容
with open(download_file_name, "r") as f:
    content = f.read()

# 将数据发送给客户端
new_s.send(content.encode("gbk"))

# 关闭套接字
new_s.close()
server_s.close()

6、tcp 的三次握手

通信双方建立链接的过程。

  • 从客户端调用 connect 开始。客户端自动发送一个SYN数据给对方,包中有一个数字,开始3次握手
  • 服务器接收到该SYN数据包,将数字+1,会送。(ACK+SYN)
  • 客户端接收到后,数值+1,回送给tcp
  • 最终目的:双方都明确对方存在,而且都准好了资源

7、tcp 的四次挥手

  • 最终目的:释放资源
  • 单工:收音机
  • 半双工:对讲机
  • 全双工:手机、网络

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode91. 解码方法,动态规划

leetcode91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而,在 解码 已编码的消息时,你意识到有许多不同的方式来解码,…

【漏洞复现】HIKVISION 视频编码设备接入网关 showFile.php 任意文件下载漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

PHP智慧教育新篇章优校管理系统小程序源码

智慧教育新篇章 —— 优校管理系统 🚀【开篇启航:智慧教育的浪潮已至】 在这个日新月异的时代,教育也在悄然发生着变革。随着科技的飞速发展,智慧教育已成为教育领域的新风尚。而“优校管理系统”,正是这股浪潮中的佼…

Keil5 操作

目录 1.Debug(软件模拟调试:): 2.代码提示设置: 3.添加. c与.h文件: 常用技巧 安装下载推荐:正点原子 1.Debug(软件模拟调试:): 文章讲解 …

【例题】证明极限

已知&#xff1a; ∀ ε > 0 , ∃ n > N , ∣ a n − A ∣ < ε \forall \varepsilon >0, \exist n>N,|a_n-A|<\varepsilon ∀ε>0,∃n>N,∣an​−A∣<ε 目标&#xff1a; ∀ ε > 0 , ∃ n > N 1 , ∣ a 1 . . . a n n − A ∣ < ε \…

pytorch学习笔记二:用pytorch神经网络模型做气温预测、分类任务构建和分类网络构建、卷积神经网络原理介绍

文章目录 一、搭建pytorch神经网络进行气温预测1&#xff09;基础搭建2&#xff09;实际操作标识特征和标签3&#xff09;构建成标准化的预处理数据&#xff08;做标准化收敛速度更快&#xff09; 二、按照建模顺序构建完成网络架构1&#xff09;np.array格式的标签(y)和特征(x…

从入门到精通:计算机视觉学习路线与实战项目推荐

全面解析计算机视觉的学习路径&#xff0c;深入探讨关键技术与实战项目&#xff0c;助您快速掌握核心技能 引言 随着人工智能的飞速发展&#xff0c;计算机视觉已成为AI领域中最具潜力和应用价值的分支之一。从自动驾驶到医疗影像分析&#xff0c;计算机视觉技术正在改变我们的…

9.23-部署项目

部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: ma…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

【LIO-SAM】LIO-SAM论文翻译(2020年)

【LIO】LIO-SAM论文翻译&#xff08;2020年&#xff09; 1&#xff0e;Abstract&#xff12;&#xff0e;INTRODUCTION&#xff14;&#xff0e;通过平滑和映射实现激光雷达惯性里程计A. 系统概述B. IMU Preintegration Factor&#xff08;推导过程参阅&#xff09;C. Lidar Od…

对onlyoffice进行定制化开发

基于onlyoffice8.0源码&#xff0c;进行二次开发&#xff0c;可实现包括但不限于以下的功能 1、内容控件的插入 2、内容空间的批量替换 3、插入文本 4、插入图片 5、添加&#xff0c;去除水印 6、修改同时在线人数限制 7、内容域的删除 8、页面UI的定制化 9、新增插件开发 10、…

Pytest-如何将allure报告发布至公司内网

原理简介 使用Python启动HTTP服务器&#xff0c;指定一个端口号port&#xff0c;内网用户可以使用ipport访问报告。 本文章继续进阶&#xff0c;简单使用nginx进行一个代理&#xff0c;使用域名可以直接访问报告。 前情概述 Pytest-allure如何在测试完成后自动生成完整报告&am…

Ansible流程控制-条件语句_循环语句

文章目录 Ansible流程控制条件语句且、或、非、是模糊条件when指令的详细使用方法 循环语句如何使用使用item变量结合with_items或loop指令item变量有固定子元素&#xff1f; 实例-服务器安装基础环境优化需求部分实现换指定新仓库安装基础软件包 Ansible流程控制 一、 1. 条件…

opencv4.5.5 GPU版本编译

一、安装环境 1、opencv4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv/archive/refs/tags/4.5.5.ziphttps://gitee.com/mirrors/opencv/tree/4.5.0 2、opencv-contrib4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv_contrib/archive/refs/tags/4…

塑料瓶回收流水线分拣系统源码分享

塑料瓶回收流水线分拣检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节&#xff1a;Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节&#xff1a;隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

【C++】8.类和对象(6)

文章目录 5. 内部类6. 匿名对象7. 对象拷贝时的编译器优化 5. 内部类 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类。内部类是一个独立的类&#xff0c;跟定义在全局相比&#xff0c;他只是受外部类类域限制和访问限定符限制&#xff0c;所以外部类定义的…

【信号与系统】2、系统

1、线性系统 举例&#xff1a; &#xff08;1&#xff09;&#xff0c;是线性系统 &#xff08;2&#xff09;&#xff0c;是线性系统 &#xff08;3&#xff09;&#xff0c;微分器&#xff0c;是线性系统 &#xff08;4&#xff09;&#xff0c;积分器&#xff0c;是线性…

具身智能火了,但规模落地还需时间

作者 | 辰纹 来源 | 洞见新研社 “人工智能下一个浪潮是具身智能&#xff0c;即能理解、推理并与物理世界互动的智能系统”&#xff0c; 英伟达CEO黄仁勋去年在ITF World 2023半导体大会上的预测正在成为现实。 5月份&#xff0c;日本横滨召开的国际顶级机器人学术会议&…

专业120+总分400+中国科学技术大学843信号与系统考研经验中科大电子信息通信工程,生物医学工程,苏医工,真题,大纲,参考书。

经过将近一年的复习备考&#xff0c;专业843信号与系统120&#xff0c;总分400&#xff0c;顺利上岸朝思暮想的中科大。总结一些自己的备考经验&#xff0c;希望能给大家一些参考&#xff0c;少走弯路。首先讲一下大家最关注的专业课&#xff1a;843信号与系统 中科大843专业课…