Python基础教程:Socket网络编程

news2024/11/15 13:33:24

网络编程是指编写程序使其能够通过网络连接与其他计算机进行通信。Python 作为一种强大的脚本语言,也提供了丰富的库来支持网络编程,如 socket、asyncio、http.client 等。在这篇教程中,我们将介绍如何使用 socket 库实现简单的网络编程。

1.Socket 编程

Socket 是一种可用于不同平台之间的进程通信机制。它可以用于创建网络套接字和进行网络通信。在 Python 中,socket 库提供了对 BSD socket API 的访问,它包含了一些常见的网络编程工具,例如 TCPUDP 协议等。

2.创建 Socket

要创建一个 socket,我们需要导入 socket 库并调用 socket() 函数。这个函数有两个参数,第一个参数是地址族(Address Family),第二个参数是套接字类型(Socket Type):

import socket
#创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

其中,AF_INET 表示 Internet 地址族,SOCK_STREAM 表示使用 TCP 协议。如果使用 UDP 协议,则需要使用 SOCK_DGRAM

3.连接 Socket

连接到另一个计算机上的 socket 需要先获取该计算机的 IP 地址和端口号。连接后,我们就可以通过 socket 对象进行数据的发送和接收了。

import socket
# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到远程计算机
server_address = ('localhost', 10000)
sock.connect(server_address)
# 发送数据
message = 'Hello, world!'
sock.sendall(message.encode('utf-8'))
# 接收数据并打印
data = sock.recv(1024)
print(f'Received: {data.decode("utf-8")}')

在上面的代码中,我们创建了一个 socket 对象,并通过 connect() 方法连接到本地地址为 ‘localhost’、端口号为 10000 的计算机。然后我们发送了一条消息,并从服务器接收到了返回值。最后,我们将返回值解码为字符串并打印出来。
python网络编程socket

4.监听 Socket

要监听来自其他计算机的连接请求,我们需要使用 bind() 方法将 socket 绑定到本地 IP 地址和端口号上。然后,我们可以调用 listen() 方法开始监听连接。

import socket
# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定到本地地址和端口
server_address = ('localhost', 10000)
sock.bind(server_address)
# 开始监听连接
sock.listen(1)
while True:
    # 等待连接
    print('Waiting for a connection...')
    connection, client_address = sock.accept()
    try:
        print(f'Connection from {client_address}')
        # 接收数据
        data = connection.recv(1024)
        print(f'Received: {data.decode("utf-8")}')
        # 发送数据
        message = 'Hello, client!'
        connection.sendall(message.encode('utf-8'))
    finally:
        # 关闭连接
        connection.close()

在上面的代码中,我们创建了一个 socket 对象,并通过 bind() 方法将其绑定到本地地址为 ‘localhost’、端口号为 10000 的计算机。随后,我们调用 listen() 方法开始监听连接。通过 send()方法可以发送数据到服务器。通过recv()方法可以从服务器接收数据。这些操作是阻塞的,也就是说,在数据发送或接收完成之前,程序会一直等待。

while 循环中,我们使用 accept() 方法等待客户端连接。当一个新客户端连入时,我们会得到一个新的 socket 连接和客户端地址(IP 地址和端口号)。然后,我们可以使用这个新的连接进行数据的发送和接收。最后,我们调用 close() 关闭连接并继续等待下一个客户端连接。

上一篇教程:Python面向对象编程

5.小结

本篇教程介绍了如何使用 Python 中的 socket 库实现网络编程。网络通信中还是三种模式:单工模式、半双工模式、全双工模式,有兴趣的小伙伴可以自己动手,强化python网络编程的技能。

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

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

相关文章

基于react18+hooks通用全局手机端弹框组件

RcPop 基于react18.x hooks自定义msg/alert/dialog/model/toast弹框组件 基于react18 hook开发全局通用mobile弹层组件。整合了msg/alert/dialog/toast及android/ios等弹窗效果。支持**20**参数、组件式函数式两种调用方式。 引入弹窗组件 在需要使用到弹窗的页面引入组件。 …

Linux - 添加普通用户为信任用户

1.添加用户 在Linux系统中,可以使用以下步骤添加用户: 打开终端并以root用户身份登录 输入以下命令以创建新用户(请将username替换为您想要创建的用户名): adduser username 设置该用户的密码,使用以下命…

MySQL报错:Row size too large。

项目场景: mysql添加varchar字段 问题描述 mysql表添加一个varchar类型的字段,执行保存时报错:Row size too large. The maximum row size for the used table type, not counting BLOBs, is 6553 巴拉巴拉 原因分析: 行数据大…

「2024」预备研究生mem- 0730 逻辑模考

逻辑题记录: 前真后假,前假后真 削弱,前者更强 前假后假 是支持

迅为iTOP-LS3A5000开发板+银河麒麟操作系统

硬件准备 1.M.2.ssd硬盘(最好大于等于128G); 2.迅为LS3A5000开发板; 3.U盘(需大于8g),制作启动盘使用; 4.hdmi显示器; 5.搭载linux环境的计算机。 安装步骤 1 制作…

聚焦甲烷循环,宏基因组分析项目再创新!

甲烷,化学式CH4,在自然界分布很广,是最简单的有机物,也是最简单的烃。但同时也是一种重要的温室气体,是一种仅次于二氧化碳的强大温室气体,对环境和全球变化具有重大影响,其导致全球变暖潜力是C…

运动带哪种耳机比较好、最好用的运动耳机排名

作为一位热爱运动的达人,每天固定时间出门跑步已经成为我的必修课程。关于坚持锻炼的好处,我想不用多说,懂得人自然懂。然而,无论多么享受独自奔跑的感觉,总会有一种孤单寂寞的情绪袭上心头。相信经常跑步的朋友们都深…

如何部署Redis哨兵与集群

目录 一、Redis数据库 二、Redis哨兵模式 三、部署Redis哨兵 第一步 关闭防火墙和安全机制 第二步 修改Redis配置文件 第三步 开启Master主节点 第四步 查看哨兵信息 四、如何部署Redis集群 第一步 创建不同端口节点的目录 第二步 创建脚本文件 第三步 赋权并执行脚…

vscode设置远程登录和免密登录

首先,我们去官网下载VScode 安装过程比较简单,大家自行安装即可,注意建议安装在除C盘外的其他盘中。 安装完成后,打开我们下载好的VScode,点击左侧的Extensions选项,搜索Remote,Install第一项R…

【设计模式——学习笔记】23种设计模式——代理模式Proxy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

介绍 基础介绍 代理模式为一个对象提供一个代理对象,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在不修改目标对象代码的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象…

Day06-作业(MySQL)

备注:本次作业最终需要提交的是对应的SQL语句。 软件安装:安装数据库可视化工具Navicat Navicat下载,提取码:5555https://pan.baidu.com/s/1GtKdXu9Tx0G3ejgSwKVWZg 作业1:参照资料中提供的页面原型及需求描述&#x…

项目中使用过的线程池ThreadPoolTaskExecutor

创建线程池的实例应用 package com.youming.shuiku.datacenter.provider.utils;import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.ThreadPoolExecutor;Slf4j public class AsyncMana…

UnixBench 5.1.3 银河麒麟桌面操作系统V10 (SP1) ARM64 aarch64 图形性能测试 2d 3d, glmark2 3d测试

编译 安装libgl sudo apt install libgl-dev yeqiangyeqiang-greatwall:~/Downloads/UnixBench$ sudo apt install libgl-dev [sudo] yeqiang 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包…

安卓耗电量分析

这里写自定义目录标题 耗电原因分析分析类型 生成分析数据batterystats操作步骤:生成report报告 battery-historian手动编译安装容器安装内容解析 耗电原因分析 下文有阐述,很详细 https://www.cnblogs.com/SA226343/p/6047543.html https://www.cnblogs.com/mytec…

美颜SDK开发指南:优化直播人像表现

在当今社交媒体和直播平台的流行趋势下,越来越多的用户渴望在直播中展现更加自信和美丽的一面。本文将探讨美颜SDK的开发指南,介绍其优化直播人像表现的重要性以及关键的技术要点。 一、用户为什么离不开美颜? 美颜SDK作为一种集成在直播应用…

javascript运算符与流程控制

文章和代码已经归档至【Github仓库:https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 javascript 也可获取。 文章目录 运算符的分类算数运算符浮点数的精度问题 递增和递减运算符比较运算符逻辑运算符短路运算(逻辑中断…

报表工具有哪些?奥威BI+方案,快速搞定数据分析

报表工具有很多,如Excel、 Tableau、Power BI、帆软BI、思迈特BI等都是中国企业常用的报表工具,但要说能够成熟使用“BI方案”,更快地完成部署,推动企业大数据分析的却寥寥无几。“奥威BI方案”,低风险、高效率、高性价…

首期华为云ROMA Connect《企业集成战略与华为数字化之道》高研班在东莞圆满举办

7月25日,首期华为云ROMA Connect《企业集成战略与华为数字化之道》高研班在东莞华为制造业数字化转型中心圆满举办。 20多家东莞精密机械、电子、环保等领域的先进企业董事长、总经理、CIO、总监等高管参加培训。 本次高研班邀请到华为数字化转型专家陈劲、马兵东…

paddle实现获取pdf的内容

paddle实现获取pdf的内容 1. 环境安装2. 实现代码 源码链接 1. 环境安装 安装paddlepaddle gpu版本python -m pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simplecpu版本:python -m pip install paddlepaddle -i https://pypi.tuna.tsing…

NeRF知识点:不同Contraction的数学表达

NeRF知识点:不同Contraction的数学表达 目录 Foward-facing 场景:NDC(Normalized Device Coordinate)1 360,object-centric 场景: inverse-sphere warping1 MeRF: Piecewise-projective Contraction1 …