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

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

文章目录

  • 一. 网络编程基础
    • - 什么是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. str2. bytes: 字节, 二进制, 网络中数据的传输都是bytes类型使用 type(变量值) 查看变量类型
str --> bytes: str类型.encode(编码类型)
bytes --> str: bytes类型.decode(编码类型)
常用编码类型: gkb 和 utf-8,这两种编码类型,都是处理中文字符串1. gbk处理方式: 将一个中文字符编码为 2 个字节2. utf-8处理方式: 将一个中文字字符编码为 3 个字节
"""
import socketif __name__ == '__main__':# 1.创建socket对象  socket.socket(ip类型, 协议)# socket.AF_INET 代表IPV4   socket.AF_INET6 代表IPV6# SOCK_STREAM 代表TCPclient_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-8client_socket.send(send_data)# 4. 接受对方发送的信息  socket对象.recv(一次接收多少字节的数据)# 注意: 如果对方没有发送信息, recv函数会在此阻塞等待buf = client_socket.recv(4096)try:print(buf.decode())  # 接受信息也是bytes 所以需要转换一下,默认是utf-8except UnicodeDecodeError:print(buf.decode('gbk'))  # 也有可能是 gkb编码, 所以需要捕捉一下异常# 5. 关闭连接  socket对象.close()client_socket.close()

三. 扩展

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

  • send原理解剖:

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

  • recv原理解剖:

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

http://www.lryc.cn/news/11716.html

相关文章:

  • 超低成本DDoS攻击来袭,看WAF如何绝地防护
  • CF1795E Explosions? (单调栈)
  • C++——二叉树排序树
  • 深拷贝浅拷贝的区别?如何实现一个深拷贝?
  • Linux应用编程下连接本地数据库进行增删改查系列操作
  • 图论学习03
  • 解决qt中cmake单独存放 .ui, .cpp, .h文件
  • 操作系统(day12)-- 基本分段存储,段页式存储
  • 疯狂弹出请插入多卷集的最后一张磁盘窗口
  • Spark12: SparkSQL入门
  • show profile和trance分析SQL
  • [AI生成图片] 效果最好的Midjourney 的介绍和使用
  • Vue.use( ) 的核心原理
  • idea同时编辑多行-winmac都支持
  • 亿级高并发电商项目-- 实战篇 --万达商城项目 十一(编写商品搜索功能、操作商品同步到ES、安装RabbitMQ与Erlang,配置监听队列与消息队列)
  • 数据结构概述和稀疏数组
  • 宝塔搭建实战人才求职管理系统adminm前端vue源码(三)
  • 服务器是干什么用的?
  • C++ 之结构体与共用体
  • Java基础知识汇总(良心总结)
  • InnoDB之Undo log格式
  • 一问学习StreamAPI终端操作
  • 在屎山代码中快速找到想要的代码法-锁表法(C#)
  • 网页设计html期末大作业
  • 实战打靶集锦-006-Stapler
  • 致远OAA6版安装
  • python实用脚本(六)—— pandas库的使用(生成、读取表格)
  • 字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码、解码问题等
  • Java 布隆过滤器
  • vscode连接服务器(腾讯云)