Python-TCP网络编程基础以及客户端程序开发

2023-05-16

文章目录

  • 一. 网络编程基础
    • - 什么是IP地址?
    • - 什么是端口和端口号?
    • - TCP介绍
    • - socket介绍
  • 二. TCP客户端程序开发
  • 三. 扩展

一. 网络编程基础

- 什么是IP地址?

IP地址就是标识网络中设备的一个地址
IP地址分为 IPv4 和 IPv6
IPv4使用十进制, IPv6使用十六进制

  • 查看本机IP地址:
  1. linux和mac系统使用 ifconfig
  2. windwos系统使用 ipconfig

- 什么是端口和端口号?

端口是传输数据的通道,是数据传输的必经之路,而每一个端口都有对应的端口号,想要找到端口通过端口号即可
端口号是端口的表示
端口分类: (0-65535)
1. 知名端口号: 0-1023
2. 动态端口号: 1024-65535

IP+端口 可以确定网络中唯一的应用程序

- TCP介绍

数据不能随意传输, 在发送之前还需要选择一个对应的传输协议, 保证程序之间按照指定的传输规则进行数据的通信
TCP全称 Transmission Control Protocol,简称 传输控制协议, 它是一种面向连接的, 可靠的, 基于字节流的传输层通信协议
TCP的特点:

  • 面向连接:
    - 通信双方必须先建立好连接才能进行数据的传输,数据传输完成后,双方必须断开此连接,以释放系统资源
  • 可靠传输:
    - TCP 采用发送应答机制
    - 超时重传
    - 错误校验
    - 流量控制和阻塞管理

- socket介绍

socket简称 套接字, 是进程之间通信的一个工具, 好比现实生活中的插座, 所有的家用电器想要工作都是基于插座的, 而进程之间想要进行网络通信需要基于socket
作用: 负责进程之间的网络数据传输, 好比数据的搬运工

二. TCP客户端程序开发

"""
程序架构:
    B/S: brower/server(浏览器/服务器), 想要使用某个服务,只需要浏览器即可
    C/S: Client/Server(客户端/服务器), 想要使用某个服务,必须下载它对应的客户端软件

客户端连接服务器过程: (发送信息和接受信息可以重复执行)
    1. 创建对象
    2. 建立连接
    3. 发送信息
    4. 接收信息
    5. 关闭连接
    # 上述只是客户端的,服务端使用网络调试助手

客户端开发流程:
Python中先要使用socket, 必须先导入 socket模块
    1. 创建 socket 对象   socket.socket()
    2. 和服务器建立连接   socket对象.connect()
    3. 发送信息   socket对象.send()
    4. 接受对方发送的信息   socket对象.recv()
    5. 关闭连接   socket对象.close()

Python中的字符串:
Python中的字符串可以分为两种
    1. str
    2. bytes: 字节, 二进制, 网络中数据的传输都是bytes类型

使用 type(变量值) 查看变量类型
str --> bytes: str类型.encode(编码类型)
bytes --> str: bytes类型.decode(编码类型)
常用编码类型: gkb 和 utf-8,这两种编码类型,都是处理中文字符串
    1. gbk处理方式: 将一个中文字符编码为 2 个字节
    2. utf-8处理方式: 将一个中文字字符编码为 3 个字节
"""
import socket


if __name__ == '__main__':
    # 1.创建socket对象  socket.socket(ip类型, 协议)
    # socket.AF_INET 代表IPV4   socket.AF_INET6 代表IPV6
    # SOCK_STREAM 代表TCP
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 固定写法

    # 2. 和服务器建立连接   socket对象.connect((服务器IP地址, 端口号))  类型是元组
    client_socket.connect(("192.168.218.1", 8080))
    print("连接建立成功")

    # 3. 发送信息   socket对象.send(发送的信息)  需要是bytes类型
    send_data = "hello world!!!!".encode()  # 默认是utf-8
    client_socket.send(send_data)

    # 4. 接受对方发送的信息  socket对象.recv(一次接收多少字节的数据)
    # 注意: 如果对方没有发送信息, recv函数会在此阻塞等待
    buf = client_socket.recv(4096)
    try:
        print(buf.decode())  # 接受信息也是bytes 所以需要转换一下,默认是utf-8
    except UnicodeDecodeError:
        print(buf.decode('gbk'))  # 也有可能是 gkb编码, 所以需要捕捉一下异常

    # 5. 关闭连接  socket对象.close()
    client_socket.close()

三. 扩展

当创建一个 TCP socket 的时候,会有一个 发送缓冲区 和 接收缓冲区 , 这个发送和接收缓冲区指的就是内存中的一片空间

  • send原理解剖:

send并不是直接把数据发送给服务器端, 想要发送数据, 就必须使用网卡进行发送, 而应用程序是无法直接通过网卡发送数据的, 需要调用系统接口, 也就是说
应用程序把发送的信息先写到发送缓存区, 再由操作系统控制网卡把发送缓冲区的数据发送给服务端网卡

  • recv原理解剖:

同理, 应用程序也无法直接通过网卡接收数据, 也需要调用系统接口, 由操作系统通过网卡接收数据, 把接收的数据写入缓冲区, 应用程序再从缓冲区获得客户端发送的信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-TCP网络编程基础以及客户端程序开发 的相关文章

  • 树莓派 docker homeassistant supervisor安装

    仅供个人参考哦参考一下博主的教程 xff0c 顺便补充了点中间遇到的问题 Power Tea的个人空间 哔哩哔哩 bilibili 先换软件源 查看你的版本 如果是bullseye则不用修改后续换源的文件 lsb release a sud
  • 树莓派扩展分区失败 There was an error running option A1 Expand Filesystem

    参考原文地址 xff1a Expand Filesystem Issues Raspberry Pi Projects raspberry projects com 1 输入并回车 sudo fdisk dev mmcblk0 2 输入p并
  • catkin_simple 的使用

    https www cnblogs com yebo92 p 5841882 html Catkin simple 可用于规范catkin package 并简化CMakeLists Dependencies are just listed
  • 关于esp01s引脚拉低后的启动情况,esp01无法连接,无法正常工作。

    由官方手册所示说明 xff1a 运行模式时io0和io2 xff0c 以及io1 xff08 txd xff09 在上电时应为上拉电平 经过个人测试 xff0c io0拉低无法正常工作 xff0c io2拉低无法正常工作 xff0c io3
  • openstack(T版):glance镜像服务

    glance镜像服务介绍 它在OpenStack中的项目名称为glance xff0c 在早期的OpenStack版本中 Glance只有管理镜像的功能 xff0c 并不具备镜像存储功能 现在 xff0c Glance已发展成为集镜像上传
  • Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!...

    在java中可有两种方式实现多线程 xff0c 一种是继承Thread类 xff0c 一种是实现Runnable接口 xff1b Thread类是在java lang包中定义的 一个类只要继承了Thread类同时覆写了本类中的run 方法就
  • 初识C语言(1)

    这是对C语言的大概了解 一 什么是C语言 对于日常生活中 xff0c 任何人交流的会通过中文 xff0c 英文 来交流 xff0c 这些都是语言 xff0c 而计算机语言就是任何计算机交流的语言 xff08 C语言 xff0c c 43 4
  • Git的图形化界面如何使用

    一 什么是Gitee gitee https gitee com xff08 中文名 xff1a 码云 xff0c 原名 Git 64 OSC xff09 是开源中国推出的基于git的代码托管服务 国内访问GitHub https gith
  • 重要性抽样方法实例分享

    经过matlab爱好者公众号连续不断的推送Monte Carlo方法 xff0c 所以我们对其了解透彻了吗 xff1f NO xff01 当然还得日日精进 大家经常使用的Monte Carlo方法并不完美 xff0c 我估计大多数人也听不懂
  • 你们要的网页版matlab来了,速领!

    近来有不少小伙伴在公众号里面问网页版matlab xff0c 之前公众号确实是在菜单中给大家分享过一款网页版matlab编译环境 xff0c 不过由于公众号菜单更新换代 xff0c 已经将相关分享入口给取消了 xff0c 为了让大家更加方便
  • RHEL本地登录login出现permission denied的可能的解决办法

    OS xff1a RHEL7 6 开机后发现在本地使用root和非root用户登录 xff0c 输入用户名密码后 xff0c 都会出现permission denied xff0c 没有办法进入到系统 在网上查了很多资料 xff0c 看到这
  • Updating crates.io index 速度慢的解决办法

    Rust社区公开的第三方包都集中在crates io网站上面 xff0c 他们的文档被自动发布到doc rs网站上 Rust提供了非常方便的包管理器cargo xff0c 它类似于Node js的npm和Python的pip 但cargo不
  • SecureCRT 密码解密

    SecureCRT xff08 8 以上 xff09 配置的密码存放在 Config Sessions下面的ini文件中 xff0c 内容如下 xff1a S Username 61 S Monitor Password V2 61 S P
  • AD10 四层板经验(层的性质)

    层的性质 xff1a 内部层有两种 xff1a plane和layer xff0c 他们的区别如下 xff1a plane是所有Layer的其中一个 xff0c Layer是指层 xff0c 例如有常见的信号层Signal Layers 顶
  • Centos7下httpd最新版本安装或者更新至最新版本

    查找Centos上软件库里的httpd版本 yum info httpd yum info httpd 已加载插件 xff1a fastestmirror Loading mirror speeds from cached hostfile
  • 修改git远程仓库地址

    由于git仓库的地址发生了变化 xff0c 需要修改仓库地址才能push 查看本地工程git仓库关联的远程仓库地址 xff1a span class token function git span remote v 删除本地关联的远程仓库地
  • INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法

    在Android模拟器上安装apk的时候出现 xfeff xfeff INSTALL FAILED NO MATCHING ABIS 这个错误提示的解决办法 是由于使用了native libraries 该native libraries
  • IntelliJ IDEA 控制台中文乱码

    1 预热 刚刚接触IntelliJ IDEA几天 xff0c 在易用性方面的确比Eclipse好很多 xff0c 比较智能 xff0c 各种插件 工具都已经集成 xff0c 和Mac OS X类似 开箱即用 但是还是老大难问题 中文乱码 x
  • unable to start the monitor on 4454 ,an other instance is problaly using the same port

    在打开idea studio后 xff0c 再打开android studio xff0c 或者反过来 xff0c 打开项目的时候就会报 xff1a unable to start the monitor on 4454 xff0c an
  • windows中为cmd设置代理

    在CMD环境下设置代理可能不是很常用 xff0c 但是某些情况下还是可能会用到 xff0c 比如有些资源网站被墙了 xff0c 此时你如果想访问这些资源时 xff0c 只能通过代理来访问相应的资源 xff0c 而你需要在CMD环境下下载墙外

随机推荐

  • version `GLIBCXX_3.4.21' not found 解决办法

    在安装cmake3 5 1运行 bootstrap的时候出现如下提示 xff1a gmake cmake 是最新的 span class hljs header usr soft cmake 3 5 1 Bootstrap cmk cmak
  • Oracle死锁查询及处理

    一 数据库死锁的现象 程序在执行的过程中 xff0c 点击确定或保存按钮 xff0c 程序没有响应 xff0c 也没有出现报错 二 死锁的原理 当对于数据库某个表的某一列做更新或删除等操作 xff0c 执行完毕后该条语句不提 交 xff0c
  • Ubuntu 18.04添加中文输入法

    找到设置 xff1a 点击 Manager Installed Languages 出现下图提示 xff1a Keyboard input method system 里面有Ibus XIM fcitx none 三种输入架构 xff0c
  • KEIL问题【打开文件太多造成任何按钮都不可点】【Keil4 编译时出现RL-ARM is not allowed with this license 】【 局部变量仿真显示not in scope】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • Django(2)模板、标签

    文章目录 一 使用Django模板修改页面二 Django模板标签 变量 列表 字典 过滤器1 default2 length3 filesizeformat4 date5 truncatechars6 safe if else标签 for
  • Django(3)模型

    文章目录 一 Django 模型 ORM二 数据库配置三 定义模型 xff08 创建数据表 xff09 四 数据库基本操作 插入数据 获取数据 xff08 1 xff09 查询所有的数据行 xff08 2 xff09 where条件查询 x
  • Django(4)表单

    文章目录 一 概述二 GET方法三 POST方法四 Request对象五 QueryDict对象 此文章参考菜鸟教程 xff1a Django 表单 菜鸟教程 runoob com Django版本 xff1a span class tok
  • Django(5)视图

    文章目录 一 视图概述二 请求对象HttpRequest xff08 1 xff09 GET xff08 2 xff09 POST xff08 3 xff09 body xff08 4 xff09 path xff08 5 xff09 me
  • Django(6)路由

    文章目录 一 路由概述二 正则路径中的分组 xff08 1 xff09 正则路径中的无名分组 xff08 2 xff09 正则路径中的有名分组 xff08 3 xff09 路由分发 三 反向解析 xff08 使用reverse xff09
  • Django(7)Admin管理工具

    文章目录 一 概述二 使用管理工具 xff08 1 xff09 激活管理工具 xff08 2 xff09 使用管理工具 xff08 3 xff09 复杂模型 xff08 4 xff09 自定义表单 xff08 5 xff09 内联 xff0
  • Django(8)ORM单表实例

    文章目录 一 Django ORM 单表实例创建新模型 二 数据库操作 xff08 1 xff09 添加数据 xff08 2 xff09 查找数据 filter exclude get order by reverse count firs
  • Django(9)ORM多表实例

    文章目录 一 Django ORM 多表实例创建模型插入数据 二 ORM 插入数据一对多 外键 ForeignKey多对多 xff08 Many ToManyField xff09 xff1a 在第三张表添加数据 三 关联管理器 对象调用1
  • Django(10)ORM聚合查询

    文章目录 一 聚合查询 aggregate 二 分组查询 annotate 三 F 查询四 Q 查询 此文章参考菜鸟教程 xff1a Django ORM 多表实例 xff08 聚合与分组查询 xff09 菜鸟教程 runoob com D
  • Python类的常用魔法方法

    文章目录 一 96 init 96 二 96 str 96 三 96 del 96 四 96 repr 96 五 使用案例 一 init span class token comment 在Python类中 有一类方法 这类方法以 两个下划
  • ubuntu 升级内核实战

    ubuntu 12 04内核是linux 3 2 0 24 xff0c 其实升级到最新版本3 3 4也没什么很大意义 xff0c 主要是集成了一些新的驱动和一些普通用户用不到的功能 xff0c 所以基本上本文纯属折腾 xff0c 但不要随便
  • centos7安装python3不影响python2

    文章目录 一 前言二 安装python3 一 前言 Centos7中很多软件命令依赖于系统自带的python2 比如yum 卸载python2会造成yum不可用 所以没必要卸载python2 如果要使用python3 可以通过软链接的方式安
  • Python异常的传递以及完整结构

    文章目录 异常的传递 异常的完整结构 异常的传递 span class token triple quoted string string 34 34 34 异常的传递是异常处理的底层机制 是原理层面 异常传递 当一行代码发生异常后 会向外
  • Python互斥锁小技巧

    span class token triple quoted string string 34 34 34 需求 创建两个线程 其中一个输出 1 52 另一个输出 A Z 输出格式要求 12A 13B 56C 5151Z 34 34 34
  • Python-TCP服务端程序开发

    文章目录 一 TCP服务端程序开发二 端口复用三 判断客户端程序是否断开四 多任务版本 一 TCP服务端程序开发 span class token triple quoted string string 34 34 34 主动套接字 可以收
  • Python-TCP网络编程基础以及客户端程序开发

    文章目录 一 网络编程基础 什么是IP地址 什么是端口和端口号 TCP介绍 socket介绍 二 TCP客户端程序开发三 扩展 一 网络编程基础 什么是IP地址 IP地址就是标识网络中设备的一个地址 IP地址分为 IPv4 和 IPv6 I