Python3网络编程:socket笔记

Python语言 的输入/输出流(I/O Streams) 了解输入/输出流的基础知识是掌握Python编程的重要步骤。本文介绍了Python中的标准I/O、文件I/O、JSON和CSV的处理、网络I/O、多线程和异步I/O等内容。文件I/O操作是日常开发中最常见的任务之一,通过文件完成数据的存储和读取。异常处理确保了程序在出现错误时的稳定性。JSON和CSV是两种重要的数据格式,通过Python的标准库可以轻松处理。网络编程和异步I/O为实现高效的数据传输和处理提供了强大的支持。 阅读详情

补一篇3年前的学习笔记

1、原理简述

1.1、通信

  • 通信:通过第三方(信号)进行信息的转达

发送者 ---第三方(信号)---> 接收者

1.2、通信协议

  • 通信协议:双方实体完成通信或服务所必须遵循的规则和约定

底层协议:控制硬件 发收信号
高层协议:对信息和数据进行编码和解码

协议的实现
早期协议:直接由硬件决定
现代协议:硬件+协议程序

网络协议 常见类型

协议间转换

1.3、网络协议

网络协议
计算机网络中进行数据交换而建立的规则、标准或约定的集合
TCP/IP协议
(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)
能在多个不同网络间实现信息传输的协议簇

1.4、套接字

对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。

2、socket

2.1、牛郎织女版

2.1.1、服务端

from socket import socket

# 1. 创建【TCP流式 套接字对象】
sock_stream = socket()

# 2. 将【套接字对象】与【本机IP地址+端口号】绑定在一起
sock_stream.bind(('127.0.0.1', 8888))

# 3. 将套接字变为【可监听的套接字】并设置一个连接等待队列
sock_stream.listen()
print('等待连接...\n', sock_stream)

# 4. 套接字等待客户端请求
conn, addr = sock_stream.accept()
print('创建一个新的套接字,与客户端的ip地址对应\n', conn)
print('连接到客户端的IP地址是', addr)

# 5. 收消息
data = conn.recv(1024)
print('接收到的数据', data.decode())  # .decode() 解码

# 6. 发消息
n = conn.send(b'receive\n')
print('发送了的字节数', n)

# 7. 和客户端断开连接
conn.close()

# 8. 清除套接字
sock_stream.close()

2.1.2、客户端

from socket import socket

# 1. 创建客户端套接字(要和访问的服务器的套接字类型相同)
s = socket()

# 2. 连接服务器
s.connect(('127.0.0.1', 8888))

# 3. 发消息
s.send(b'i am client')

# 4. 收消息
data = s.recv(1024)
print('客户端收到的信息:', data)

# 5. 关闭套接字
s.close()

2.2、海王版

2.2.1、服务端

from socket import socket
from threading import Thread


def target(conn, addr):
    """处理客户端的函数"""
    print('连接\033[93m{}\033[0m'.format(addr))
    while True:
        data = conn.recv(1024).decode().strip()
        if not data:
            break
        conn.send(data.encode())
        print('{}的消息\033[035m{}\033[0m'.format(addr, data))
    print('断开\033[93m{}\033[0m'.format(addr))
    conn.close()


# 创建套接字, 绑定, 监听
stream = socket()
stream.bind(('127.0.0.1', 8888))
stream.listen()
# 多线程接收客户端的连接请求
while True:
    Thread(target=target, args=stream.accept()).start()

2.2.2、客户端

from socket import socket
# 创建客户端套接字(要和访问的服务器的套接字类型相同)并连接服务器
s = socket()
s.connect(('127.0.0.1', 8888))
# 发、收 消息
while s.send(input('发消息:').strip().encode()):
    print('收信息:\033[93m{}\033[0m'.format(s.recv(1024).decode()))
# 关闭套接字
s.close()

3、补充一个Java版的socket

TCP服务端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) throws IOException {
        // 1、创建服务端对象,设定端口号
        ServerSocket serverSocket = new ServerSocket(6666);
        // 2、接收客户端请求
        Socket socket = serverSocket.accept();
        // 3、获取输入流数据
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int i;
        while ((i = inputStream.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, i));
        }
        // 4、服务器给客户端发消息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("receive".getBytes());
        socket.shutdownOutput(); // 通知客户端写完了
        // 5、关闭资源
        outputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

TCP客户端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws IOException {
        // 1、创建客户端对象
        String host = "127.0.0.1"; // 服务器地址:本机
        int port = 6666;           // 服务器端口号(1024~49151)
        Socket socket = new Socket(host, port);
        // 2、向服务端发数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello".getBytes());
        // 3、通知服务器写完了(不写这句的话,服务器会等)
        socket.shutdownOutput();
        // 4、接收服务器
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int i;
        while ((i = inputStream.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, i));
        }
        // 5、关闭资源
        inputStream.close();
        outputStream.close();
        socket.close();
    }
}
Cadence AMS Designer数模混合仿真避坑指南 数模混合仿真本质是数字域与模拟域之间的协同建模过程,其核心在于解决连续时间求解(Spectre)与离散事件驱动(Incisive)两大引擎的语义鸿沟。关键技术挑战包括接口类型不匹配、时序建模缺失、网表生成失败及跨域信号精度失真。通过VAMS标准(Verilog-AMS)、$cds_ams系统任务和logic_to_voltage等原语,可实现逻辑值与电压值的精准映射、事件调度对齐与实数级数据互通。典型应用场景涵盖PWM控制器+RC滤波闭环验证、ADC/DAC接口仿真及SoC级传感器融合系统调试。本文聚焦Ca 阅读详情

相关推荐

Python Socket网络编程(一)初识Socket和Socket初步使用

目录前言网络编程实质IP地址和端口数据传输协议协议Socket概念套接字socket对象方法合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与...

youand_me的博客 3321

Socket之Python 服务器端与Java 客户端的通信实现

一、功能描述 使用Python编写socket服务器端代码,使用Java编写socket客户端代码,实现客户端与服务器端的通信,并且客户端接收读取服务器发送的大容量数据。 二、服务器端 编程工具:Pycharm 1.使用pip命令下载socket库。 pip install socket 2.服务器端代码实现,创建server.py文件。服务器可以接收客户端发送的数据并向客户端发送数据。 import socket import threading import sys def soc

Olivia_2的博客 2852

Python网络编程:socket与asyncio

socket(套接字)是网络通信的端点,它允许不同计算机上的进程之间进行通信。Python的socket模块提供了创建、连接和操作套接字的功能。asyncio是Python 3.4引入的异步I/O框架,它提供了单线程并发编程的支持。asyncio使用协程(coroutine)来实现异步操作,使得程序能够在等待I/O操作时执行其他任务,从而提高程序的效率。Python的socket和asyncio模块为网络编程提供了强大的支持。socket模块适用于简单的网络编程任务,而asyncio。

shejizuopin的博客 1325

Python 的 Socket 编程教程

基本上,Socket 是任何一种计算机网络通讯中最基础的内容。例如当你在浏览器地址栏中输入 www.oschina.net 时,你会打开一个套接字,然后连接到 www.oschina.net 并读取响应的页面然后然后显示出来。而其他一些聊天客户端如 gtalk 和 skype 也是类似。任何网络通讯都是通过 Socket 来完成的。

m0_59485658的博客 1237

python socket网络编程

TCP 三次握手是 TCP/IP 协议族中,建立 TCP 连接时使用的一种机制,用于确保通信双方都准备好进行数据传输,并且能够正常接收和发送数据。客户端向服务器发送一个带有 SYN(Synchronize Sequence Numbers)标志位的 TCP 数据包,该数据包中还会包含一个随机生成的序列号seq=x。这个数据包的目的是向服务器表明客户端想要建立一个 TCP 连接,并初始化自己的序列号。服务器接收到客户端的 SYN 包后,会确认客户端的请求。

S_Sorin的博客 2008

Python3的socket使用方法详解

主要介绍了Python3的socket使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

python3套接字编程之socket和socketserver(TCP和UDP通信)

python3中使用socket和socketserver进行udp和tcp通信

hsy12342611的专栏 5289

跟着团子学SAP PS:WBS BOM的实际应用价值 CS71/CKW1/CKW4

过往在参与很多项目实施的时候有很多顾问都会提到WBS BOM是否要启用,但仔细聊下来会发现大部分人对WBS BOM的真正功能以及实际应用场景并不是非常了解,因为WBS BOM的实际应用场景非常有限,大部分情况下基本都可以不用考虑启用WBS BOM。 WBS BOM和普通BOM的核心区别是多了一个WBS元素编码的维度,也就是说同一个成品料号可以基于不同WBS元素编码设计不同的BOM主数据。 所以从本质而言WBS BOM真正解决的问题只是减少成品物料的物料编码,比如一个项目中生产2个同型号的控制柜,但两个控制柜

Lucas1211的博客 6307

python3--socket编程(tcp协议)

python3--socket编程(tcp协议)

qq_43966957的博客 2320

实战指南:利用 LangGraph 的状态管理实现多轮对话的上下文隔离与持久化

本文详细介绍了如何利用LangGraph的状态管理机制,高效实现多轮对话中的上下文隔离与持久化。通过实战代码演示,从基础的消息历史管理到自定义状态扩展,再到使用SQLite进行生产级持久化,系统讲解了如何借助LangGraph的State和Checkpointer自动化处理对话记忆、用户隔离及数据存储,显著提升开发效率。

weixin_28396629的博客 490

74LS161/48 交通灯控制系统:30-5-20-5 时序逻辑电路 Multisim 仿真验证

本文详细解析了基于74LS161/48芯片的交通灯控制系统设计,通过Multisim仿真验证30-5-20-5时序逻辑电路。从系统架构搭建、状态机实现到波形分析,提供全流程操作指南与典型问题排查方法,助力数字电路课程设计高效完成。

weixin_26742753的博客 380

python网络编程学习笔记(3):socket网络服务器

python网络编程学习笔记(3):socket网络服务器 python网络编程学习笔记(3):socket网络服务器 - 小五义 - 博客园python网络编程学习笔记(3):socket网络服务器转载请注明:@小五义http://www.cnblogs.co...

220

深入解析Carry4的内部结构与工作原理

本文深入解析了Xilinx/AMD FPGA中的核心硬件资源Carry4的内部结构和工作原理。作为实现超前进位的关键物理电路,Carry4通过其CI、DI、S、O、CO等端口,高效处理4位算术运算的进位逻辑。文章通过端口详解、结构分析和实战计算示例,揭示了其如何加速加法、减法等运算,并探讨了其在优化FPGA设计时序与资源利用中的关键作用。

n4o5p6q7r的博客 503

micropython中文社区 socket通讯_python网络编程学习笔记(3):socket网络服务器

服务器和客户端程序很类似,上节学习了客户端程序,这一节将仔细学习一下利用socket建立TCP服务器和UDP服务器。1、TCP连接的建立方法客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较。步骤TCP客户端TCP服务器第一步建立socket对象建立socket对象第二步调用connect()建立一个和服务器的连接设置socket选项(可选)第三步无绑定到一个端...

weixin_39636696的博客 703

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料

中颖单片机SH79F3213正弦波矢量的电动车小毛驴控制器量产资料 中颖单片机SH79F3213 制作的电动车小毛驴控制器量产资料,已量产十几万片,拿到手即可量产 1、提供原理图 2、提供PCB图 3、提供C语言源代码程序 4、提供清单 ...

m0_69036675的博客 4528

python 3 测试无线网速编程_python网络编程学习笔记(3):socket网络服务器

转载请注明:@小五义 小五义 - 博客园​www.cnblogs.com 服务器和客户端程序很类似,上节学习了客户端程序,这一节将仔细学习一下利用socket建立TCP服务器和UDP服务器。1、TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较。下面具体来讲这四步的建立方法:第一步,建立socket对象:这里与客...

weixin_39887748的博客 277

华为OD 面试手撕代码真题【判断链表是否有环】

华为OD 面试手撕代码真题【判断链表是否有环】

MISAYAONE的博客 7239

Python入门:Python3 网络编程全面学习教程

Python入门:Python3 网络编程全面学习教程,本文介绍Python3网络编程知识,涵盖两种层级服务:低级别的Socket提供BSD Sockets API,高级别的SocketServer简化服务器开发。解释了Socket(套接字)的概念及socket()函数参数,详述服务器端、客户端及公共用途的Socket对象方法。通过TCP客户端与服务器通信的实战案例,展示了具体实现代码与运行步骤,还列出了Python针对各类网络协议的常用模块,为网络编程学习提供了从基础到实践的全面指导。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

数据资产入表——解读100页数据资产入表解读与分析【附全文阅读】

本文档《数据资产入表:解读与分析》面向企业财务、数据管理、法务合规及高管等核心岗位,系统解析数据资产入表全流程。以"政策-实操-价值"为主线,首先解读入表政策要求,明确会计处理规范;其次详细拆解数据盘点、治理、确权、评估等实操步骤,提供行业案例参考;最后分析入表难点及后续运营策略,为企业提供从政策理解到落地执行的一站式解决方案。

cdfunlove的博客 393

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python网络编程实战:从Socket到异步IO

Python网络编程是一个从基础到高级的过程,需要掌握Socket编程、HTTP编程和异步IO编程等技能。作为一个非科班转码者,我认为通过系统学习和实践,完全可以掌握Python网络编程技术。虽然Python网络编程的性能不如Rust,但它的开发效率和丰富的生态系统使其成为网络应用开发的理想选择。同时,结合Rust的性能优势,可以进一步优化网络应用的性能。保持学习,保持输出。虽然现在我还是个菜鸡,但我相信只要坚持,总有一天能成为真正的「第一程序员」!

no1coder的博客 1万+

jre9下载 jdk9

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

Python3 Socket 网络编程复习笔记

本文系统介绍了Python网络编程的核心知识,主要包括:1.基础概念:区分高低级别网络服务,解释套接字(Socket)定义及其在进程间通讯中的作用;2.核心API:详细说明socket()函数参数及服务器端/客户端专用方法,包括bind()、listen()、connect()等;3.实战案例:提供简单TCP通讯、带时间戳双向通讯、多线程聊天室三个层次的代码实现,涵盖单工/全双工/群聊私聊等场景;4.补充知识:列举常用网络协议及对应Python模块,总结TCP服务器/客户端标准开发流程。文中所有示例均附带完

永远怀着至诚之心拥抱世界 888

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【python进阶-3】Socket网络编程

是通过使用网络套接字(Socket)来实现计算机间通信的技术。Socket 是操作系统提供的用于网络通信的接口,它允许程序发送和接收数据。通过 Socket,程序可以建立客户端与服务器之间的连接,在网络中传输数据。

m0_69378371的博客 1204

2025 Python3 网络编程 Socket编程详解

本文介绍了Python中的Socket网络编程基础,主要涵盖TCP和UDP两种通信协议。TCP是基于连接的可靠传输协议,详细说明了服务端和客户端的处理流程及示例代码;UDP是无连接的简单数据传输协议,介绍了其服务端和客户端的实现方式。文章还讲解了如何使用Python标准库中的socketserver模块简化服务器开发,包括TCPServer和UDPServer的使用,以及自定义请求处理类的方法。最后提供了相关代码仓库地址和Python3学习资源链接。

qyydeep的博客 693
上一篇: Python3模块pika连接RabbitMQ消息队列(代码自用)
下一篇: Python网络编程:极简WEB开发HTML、CSS、JavaScript、Flask
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值