Python网络编程(TCP协议基础、附代码)

Python 网络编程 TCP/UDP 详细基础 1 基础概念 1.1 Linux Windows 命令行查看网络信息 Linux: ifconfig windows: ipconfig 开/关网卡:sudo ifconfig ###(网卡名) up/down 1.2 IP地址 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 IP地址即在网络中标识一台. 阅读详情

#网络编程
#ip地址的作用:在互联网/局域网上唯一的标识一台电脑

#ip地址的分类
    A类:1字节(0 + 7*网络号)+ 3字节(主机号)
    B类:1字节(10 + 6*网络号)+ 1字节(网络号) + 2字节(主机号)
    C类:1字节(110 + 5*网络号)+ 2字节(网络号) + 1字节(主机号)
    D类:1110 + ...用于多播
    E类:11110 + ...保留

#单播:针对一个对象
#多播:针对一个群组
#广播:针对所有计算机

#xxx.xxx.xxx.0 和 xxx.xxx.xxx.255 不能用

#端口:区分一个ip网络下哪个进程!!!大小为0-65535,

#端口分类
    知名端口(0-1023):大家都默认使用的端口,比如80端口给HTTP服务,21端口给FTP服务
    动态端口(1024-65535):指当一个进程需要网络程序需要网络通信时,向主机申请一个端口,主机从可用端口中分配一个给进程
    

#传输层提供的通信类型:
    面向连接的可靠服务 ----> TCP协议(Transmission Control Protocol 传输控制协议)
    面向无连接的不可靠服务 ----> UDP协议(User Datagram Protoco 用户数据报协议)
    
    TCP协议规定:
        传输服务必须建立连接:三次握手
        传输结束必须断开连接:四次挥手
        传输数据必须保证可靠

#TCP连接时三次握手
    1、客户端发送一个ACK标志位
    2、服务端接收到请求后告诉客户端可以连接;或者拒绝连接
    3、客户端收到恢复之后,告知服务端,已收到,下面发送具体消息
    
#数据可靠性:
    数据无重复,无丢失,无失序,无错误

#TCP断开连接时四次挥手
    1、主动方发送标志位告知被动方要断开连接
    2、被动方返回相应标志位告知主动方已经接收到请求
    3、主动方再次发送标志位信息表示已经准备好断开,可以断开
    4、被动方断开连接并发送已经断开信息

#UDP协议
    不保证数据完整性
    数据的发送都是由发起端决定的,不考虑接收端的情况

#通信协议的选择
    TCP    
    1、对传输质量要求较高,需要可靠传输
    2、传输数据量大,不需要频繁的连接
    e.g.qq消息,邮件发送,文件上传,账户登陆
    
    UDP
    1、对实时性要求高,完整性要求不高
    2、网络状况不佳,完整性要求不高
    3、建立必要的非连接情况,如广播组播

#套接字socket分类
    流式套接字:传输层用TCP协议提供面向连接的创数服务
    数据包套接字:传输层用UDP协议提供面向无连接的传输服务
    原始套接字:一般用于底层协议测试(用不到)
    
#服务端创建TCP服务器的基本流程
1、创建流式套接字
    socket.socket(family = AF_INEF, type = SOCK_STREAM, proto = 0)
    参数:
        family:协议族类型 
            AF_UNIX:仅用于单一的Unix系统进程间相互通信
            AF_INET:服务器的网络通信
            AF_INET6:使用IPv6的服务器网络通信
        type:套接字类型
            SOCK_STREAM TCP流式套接字
            SOCK_DGRAM UDP数据报套接字
            SOCK_RAW 底层套接字
        proto:子协议选项(通常为0,因为一般情况下传输层没有子协议)
    返回:套接字对象
            
2、绑定本机IP和端口
    sock.bind()
    参数:For IP sockets, the address is a pair (host, port)即(主机名,端口号)
        比如("localhost", 8888)("",8888)("127.0.0.1(回环测试IP)",8888)只有本机进程能够连接服务器
        ("0.0.0.0",8888),("192.168.137.111(本地IP)",8888)(局域网其他成员都可以访问)

3、将套接字变为监听状态
    sockfd.listen(n)
    功能:将套接字设置为监听套接字,并设置一个连接等待队列,避免连接争夺,服务器按照顺序处理
    参数:正整数,表示等待队列的大小(Linux下是没用的,系统自动设定,win和mac下有用)

4、套接字等待连接,然后连接
    conn, addr = sockfd.accept()    
    功能:阻塞等待客户端的连接
    参数:无
    返回值:
        conn:和客户端进行交互的新套接字
        addr:连接进来的客户端的ADDR(IP & PORT)
    
5、收发消息
    conn.recv(buffer_size)
    功能:阻塞接收一个消息
    参数:一次从缓冲区得到的消息的最大大小(字节);如果没有那么大,得到所有消息,如果比那个大,则拿buffer_size个字节
    返回值:收到的消息,一般格式为bytes

    conn.send(data)
    功能:发送消息
    参数:要发送的内容;python3中要求send的必须是字节数组,即bytes格式
    返回值:实际发送的字节数
    
6、关闭套接字
    conn.close()    #表示当前连接的客户端连接断开
    sockfd.close()    #表示不再接收请求#示例代码:

from socket import *

IP = "127.0.0.1"
PORT = 8888
ADDR = (IP, PORT)
BUFFERSIZE = 128


sockfd = socket(AF_INET, SOCK_STREAM, 0)

sockfd.bind(ADDR)

sockfd.listen()

conn, addr = sockfd.accept()

recv_data = conn.recv(BUFFERSIZE)

conn.send(bytes("I am WilliamCode"))

conn.send("This is the second message!")

conn.close()
sockfd.close()


#客户端和服务端的套接字的类型必须一致

#创建客户端
1、创建客户端套接字
    connfd = socket(AF_INET, SOCK_STREAM)
2、绑定bind(可以没有,如果没有,IP为本地IP,PORT随机分配)
3、连接
    connfd.connect(address)
    功能:连接服务器
    参数:For IP sockets, the address is a pair (host, port),即(服务器IP,服务器端口号)
4、关闭
    connfd.close()

*注意点:
    1、客户端与服务端套接字类型必须相同
    2、客户端就是用创建的套接字和服务器交互
    3、recv和send要同步,防止死阻塞#示例代码:

import socket

SERVER_IP = "192.168.31.129"
SERVER_PORT = 8888
SERVER_ADDR = (SERVER_IP, SERVER_PORT)
BUFFER_SIZE = 1024

connfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

connfd.connect(SERVER_ADDR)


connfd.send("Hello Server!".encode())


recv_data = connfd.recv(BUFFER_SIZE)
print("Received from server", recv_data.decode())


connfd.close()

#send和sendall函数是一样的,只是发送失败时报错
#如果send的数据特别大,实际发送字节数可能比数据的小,会发送两次

#代码:服务器接收多个客户端的多个消息,客户端发送多个消息

#!server.py

客户端

from socket import *

IP = "192.168.31.129"
PORT = 8888
ADDR = (IP, PORT)
BUFFERSIZE = 128


sockfd = socket(AF_INET, SOCK_STREAM, 0)

sockfd.bind(ADDR)
sockfd.listen()

while True:

    conn, addr = sockfd.accept()
    
    while True:
        try:
            recv_data = conn.recv(BUFFERSIZE)    
        except:
            break    
        print("Connection from IP: %s, PORT: %d" % (addr[0], addr[1]))

        print("Received Data:", recv_data.decode())

        conn.send("Ragor that, client!".encode())

    conn.close()
sockfd.close()


#!client.py

客户端

import socket

SERVER_IP = "192.168.31.129"
SERVER_PORT = 8888
SERVER_ADDR = (SERVER_IP, SERVER_PORT)
BUFFER_SIZE = 1024

connfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

connfd.connect(SERVER_ADDR)

while True:
    msg = input("Please input the msg: ")
    if not msg:
        break
    connfd.send(msg.encode())


connfd.close()


#TCP循环服务不能满足多个客户端同时连接的情况,它不允许多个客户端同时占有客户端资源


 

基于TCP协议的Socket网络编程( ) TCP编程 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。 今天我们要在Python中,基于TCP协议进行Socket网络编程 客户端 大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 举个例子,当我们在浏览器中... 阅读详情

相关推荐

Python 网络编程

带你了解 什么是网络、什么是IP地址、什么是Socket套接字?

qq_43629857的博客 340

Python网络编程(全网最详细)

1、本课程是介绍Python有关网络编程最全面的讲解视频:包含:IP端口、OSI模型、HTTP协议、python3.中的urllib库,urllib3、socket,TCP、UDP2、本课程对抽象的理论讲解使用案例贯穿整个内容,让学习者能够按照一个案例思路持续理解下去3、生动有趣的师生互动依然是课程的特色

Keil5安装教程(保姆级)Keil5mdk安装步骤

6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活mdk,显示mdk的使用期限。6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活C51,显示mdk的使用期限;3、在安装文件中点击keygen.exe文件,粘贴复制过的CID,选择Target为C51,点击Generate,生成激活码;4、在弹出的界面中会自动安装在安装keil的路径,点击“Next”进行后续安装,安装完成后,点击“Finish”。

m6886258的博客 9万+

python网络编程

python网络编程

weixin_44992737的博客 1万+

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

大数据架构中的数据血缘追踪技术解析

数据血缘(Data Lineage)是指数据从源头到目标的完整流转路径,它记录了数据在整个生命周期中的变化过程。在大数据架构中,数据血缘追踪技术已经成为数据治理的核心组成部分。本文旨在全面解析数据血缘追踪的技术原理、实现方法和应用实践,帮助读者深入理解这一关键技术。本文将从基础概念入手,逐步深入到技术实现细节,最后探讨实际应用和未来趋势。数据血缘的核心概念和技术原理数据血缘的数学模型和算法实现实际项目案例和代码解析主流工具和解决方案比较未来发展方向和技术挑战。

架构师的AI之路,分享AI应用开发架构的学习与实践。 687

Python网络编程(小白一看就懂)

Python网络编程(小白一看就懂)

weixin_55154866的博客 2171

基于EtherCAT的AM402与SV660N、IS620N伺服运动控制实战指南

本文详细介绍了基于EtherCAT总线的汇川AM402 PLC与SV660N、IS620N伺服驱动器构建运动控制系统的完整实战流程。内容涵盖硬件平台搭建、软件组态、关键参数设置、InoProShop编程及调试技巧,旨在帮助工程师快速掌握这一高精度、高响应的工业自动化解决方案。

weixin_29204205的博客 400

Python网络编程之TCP协议(二)

网络编程是现代软件开发中不可或缺的一部分。无论是构建Web应用程序、移动应用后端,还是进行分布式系统开发、物联网设备通信,都离不开网络编程技术。在众多网络协议中,TCP(Transmission Control Protocol,传输控制协议)以其可靠性、面向连接的特性,成为应用最广泛的协议之一。Python作为一门功能强大且易于学习的编程语言,提供了丰富的网络编程库,使得开发者能够轻松地构建基于TCP协议的网络应用。

专注Rust编程与技术分享,涵盖C++、Python等开发实战,新手友好,专注实战,助力编程成长。 13万+

保姆级教程:手把手带你玩转英飞凌TC397开发板的板载资源(CAN FD、LCD、SD卡)

本文提供英飞凌TC397开发板的全面开发指南,涵盖CAN FD通信、LCD显示、SD卡文件系统和以太网通信等核心功能。通过详细的代码示例和硬件连接说明,帮助开发者快速上手并充分利用开发板的丰富资源,实现高效嵌入式系统开发。

weixin_33726313的博客 241

TP4056在单节锂电池充电管理中的创新应用与电路优化

本文深入探讨了TP4056线性充电管理芯片在单节锂电池充电电路中的创新应用与优化方案。针对“边充边用”的核心挑战,文章详细解析了利用PMOS管构建智能供电切换电路的原理,实现了外部电源与电池供电的无缝、安全切换,有效杜绝了电池“边充边放”的风险。同时,提供了关键的元器件选型、PCB布局布线技巧及常见问题排查指南,为创客和硬件开发者提供了高性价比、高可靠性的锂电池电源管理实践方案。

rock5的博客 501

Python 网络编程:TCP 与 UDP 协议详解及实战代码

在万物互联的时代,网络编程已成为开发者必备的核心技能。Python 凭借其简洁优雅的语法和强大的标准库支持,为网络应用开发提供了高效解决方案。本文将深入剖析 TCP 和 UDP 两大核心传输协议,通过代码实例演示其在 Python 中的具体实现,助力开发者构建稳定可靠的网络应用。

qq_63910171的博客 2371

AUTOSAR系统服务篇 - BswM的使用

本文档是对4.0.3版及更高版本的AUTOSAR模式管理应用的介绍。其主要目的是为AUTOSAR的用户和开发人员提供基于示例的AUTOSAR模式管理不同方面的详细概述,这些示例在文中进行了解释。本文中的代码清单共同构成了示例ECU的配置。第2章解释了基础的模式管理概念,例如一般的模式、如何实现模式切换、模式管理者和模式用户的角色等。其次介绍了应用模式管理和基础软件模式管理的依赖关系,两者密切相关。基础软件模式管理器是AUTOSAR R4.0中的中央模式管理模块。它具有很高的可配置性。

IOT2017的博客 846

python网络编程与使用TCP协议实现聊天室

网络编程 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计等。 套接字( Socket)是网络通信的关键,套接字也是应用程序和网络协议的接口。套接字由IP和端口号组成。网络层通信主要由TCP和UDP两种通讯。

个人学习笔记库,一篇一篇记录成长的足迹 6268

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1731

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Python】网络编程之UDP、TCP

Socket的英文原义是“孔”或“插座”,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket),socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。基本上,Socket 是任何一种计算机网络通讯中最基础的内容。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python网络编程之TCP协议(一)

TCP(Transmission Control Protocol,传输控制协议)是互联网的核心协议之一,提供了一种面向连接、可靠的字节流服务。与UDP不同,TCP注重数据完整性和顺序,确保数据在传输过程中不会丢失或乱序。本文将详细介绍TCP协议,包括其中涉及到的各种概念。目录前言IP地址的概念1. IP 地址的概念2. IP 地址的表现形式3. 查看 IP 地址4. 检查网络是否正常端口和端口号1. 问题思考2. 什么是端口3. 什么端口号4. 端口和端口号的关系5. 端口号的分类了解TCP。

专注Rust编程与技术分享,涵盖C++、Python等开发实战,新手友好,专注实战,助力编程成长。 13万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python网络编程基础之ip地址,端口号,TCP,socket

Python网络编程基础之ip地址,端口号,TCP,socket

ncu5509121083的博客 5117

Python网络编程基础

网络编程介绍 网络通信其实就是两台计算机上的两个进程之间的通信。 例如通过浏览器访问百度,就是浏览器进程和百度服务器的某个进程之间进行网络通信。 网络通信需要遵守一定的规则也就是网络协议,互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议。 通信双方必须知道对方的标识,也就是互联网上每个计算机的唯一标识即IP地址。但是一台计算机可以同时接入多个网络,即多网卡,所以IP地址对应的实际上是计算机的网络接口。 IP协议负责把数据按块分割并以块为单位

patrick_big_data的博客 2089

Python网络编程之网络基础

一起来学习Python网络编程之网络基础(一起努力,咱们顶峰相见)

精益求精,永无止境,永远在路上! 4167

Python 网络编程从入门到精通:架构、协议与 Socket 实现

本文系统介绍了Python网络编程的核心知识,内容包括:网络架构模式(C/S、B/S、P2P)、网络通信三要素(IP地址、端口号、传输协议)、TCP/UDP协议对比及其工作原理。重点讲解了Socket编程方法,提供TCP/UDP服务器与客户端的完整实现代码,并涵盖多线程处理、非阻塞I/O等高级技术。文章还给出了错误处理和资源管理的最佳实践,适合开发各类网络应用。通过学习这些内容,读者可以掌握Python网络编程的基本技能并为进一步学习高级网络技术奠定基础。

weixin_65516460的博客 2934

【Python】进阶 - 网络编程(TCP开发基础、进程和线程)

本文摘要: Python网络编程与并发编程指南,涵盖TCP/IP协议栈、进程和线程的核心概念。主要内容包括:1)网络编程三要素(IP地址、端口号、协议)及socket类使用;2)TCP客户端/服务器开发流程与代码示例;3)进程与线程的对比分析,重点介绍multiprocessing和threading模块的使用;4) 进程间内存隔离特性与线程共享全局变量的区别;5) 守护进程/线程的设置方法。文章通过代码示例详细演示了网络通信和并发编程的实现方式,并分析了不同场景下的适用方案(CPU密集型推荐多进程,IO密

weixin_52613525的博客 999

【Python网络编程】TCP和UDP的使用(附实例)

Socket又称 ‘套接字’,是网络编程的一个抽象概念。通常我们用一个Socket表示 ‘打开了一个网络链接’,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

2201_75362610的博客 1670

Python网络编程

网络编程是指在计算机网络环境下进行数据通信和资源共享的编程技术。随着互联网的普及,网络通信成为现代计算机应用的核心部分。Python 凭借简洁易学、丰富的库支持等特点,成为网络编程的常用工具。定义:Socket 是网络通信的基础,是实现网络编程的抽象层,用于在不同主机之间建立通信连接,实现数据的发送和接收。在 Python 中的实现:Python 通过socket模块封装了 Socket 功能,提供了丰富的接口用于实现网络通信,如创建 Socket、连接、发送 / 接收数据、关闭连接等操作。关键参数。

YUNYINGXIA的博客 1604
上一篇: Python+Mysql学生选课系统(附下载链接)
下一篇: 基于Python的ftp文件服务器(附代码)
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值