python中socket网络编程的详细介绍(附示例)

本篇文章给大家带来的内容是关于python中socket网络编程的详细介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

网络通信的三要素

  • IP

通信的时候, 双方必须知道对方的标识, 好比发邮件必须知道对方的邮件地址。 互联网上每个计算机的唯一标识就是IP地址, 类似 123.123.123.123 。

IP地址实际上是一个32位整数(称为IPv4) , 以字符串表示的IP地址,如 192.168.0.1 实际上是把32位整数按8位分组后的数字表示, 目的是便于阅读。
IPv6地址实际上是一个128位整数, 它是目前使用的IPv4的升级版, 以字符串表示。类似于 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。

  • 端口port

在两台计算机通信时, 只发IP地址是不够的, 因为同一台计算机上跑着多个网络程序。 一个IP包来了之后, 到底是交给浏览器还是QQ, 就需要端口号来区分。

每个网络程序都向操作系统申请唯一的端口号, 这样, 两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

  • TCP/UDP协议

为了把全世界的所有不同类型的计算机都连接起来, 就必须规定一套全球通用的协议,大家把互联网的协议简称TCP/IP协议

socket编程

Socket是网络编程的一个抽象概念。 通常我们用一个Socket表示“打开了一个网络链接”, 而打开一个Socket需要知道目标计算机的IP地址和端口号, 再指定协议类型即可。

import socket
# socket.gethostname()当不传入参数时,返回本机主机名
print(socket.gethostname()) #DESKTOP-EN0LQJH

#域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称
#通过域名查找服务器IP地址
print(socket.gethostbyname('www.baidu.com'))    #119.75.216.20

#通过一个IPv4的地址来获取主机信息
print(socket.gethostbyaddr('114.114.114.114'))

#通过IP/port组合,访问服务器信息
# 如果是AF_INET则格式为:(address, port),如果为AF_INET6,则返回(address, port, flow info, scope id)

print(socket.getaddrinfo('www.xunlei.com',80))

用socket实现简易的web服务器

import socket
def reply_info(socketObj):
    # socketObj.send('ok')
    with open('hello.html') as f:
        socketObj.send(f.read().encode('utf-8'))
if __name__=="__main__":
    #1. 创建socket对象
    socket_server = socket.socket()
    #2. 绑定IP和端口
    socket_server.bind(('192.168.1.165',9999))
    print("服务器端已经启动9999端口......")
    #3. 监听是否有客户端连接
    socket_server.listen(5)

    while True:
        # 4. 接受客户端的连接
        socket_client,address = socket_server.accept()
        # 5. 接收客户端发来的信息
        data = socket_client.recv(1024)
        # 6. 与客户端进行交互, 返回给客户端信息
        reply_info(socket_server)
        socket_server.close()

以上就是python中socket网络编程的详细介绍(附示例)的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

天工AI写个人简介提示词怎么加示例,结果更稳定

加示例显著提升天工AI生成个人简介质量——它能对齐语言节奏、信息密度和人设颗粒度;不加则套用空洞模板。因天工AI无记忆,需用真实自写段落或正反对比样例明确风格坐标,再嵌入角色、背景与硬约束。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 天工AI生成个人简介时加不加示例,输出质量差异非常明显——没示例时它常套用空洞的“本人性格开朗、责任心强...

DeepSeek写脚本运行示例提示词怎么写,才能复制就能执行

必须以if name == "__main__":开头并调用main(),显式import所有依赖,输入用sys.argv[1]或input(),输出仅print纯文本,禁用可视化和交互语法,脚本可直接python script.py运行。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 要让DeepSeek生成的Python脚本复制后无需修...

即梦AI写短剧片段提示词怎么加示例,结果更稳定

即梦AI生成短剧需精准提示:首句锁定角色全貌与锚定指令,分镜按秒或镜头号写清动作链、情绪细节、道具物理逻辑及结尾终止态,确保不跳脸、不穿帮、有叙事节奏。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 想让即梦AI生成的短剧片段角色不跳脸、动作不穿帮、镜头有叙事节奏,光写“男主生气转身离开”这种笼统描述根本不行,必须把人物、时间、镜头、动作、...
· AI · 207740

千问在做Few-shot学习的时候给几个示例效果最好?提示工程技巧

优化千问Few-shot提示需动态配置示例数量、按上下文窗口反向推算上限、筛选高相关性示例、实施位置加权排序、开展质量驱动的迭代验证。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您在使用千问(Qwen)进行Few-shot学习时发现模型输出不稳定或泛化能力不足,则可能是由于示例数量设置不当导致上下文干扰或模式识别失效。以下是针对千问...

智谱清影视频生成API怎么对接?代码示例

需通过HTTP API集成智谱清影视频生成功能,关键步骤包括:一、在开放平台注册获取API Key与Base URL;二、构造含Authorization和Content-Type头的POST请求;三、支持Python同步(requests)、异步(httpx)及cURL命令行调用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 如果您希望...
· AI · 227078

MATLAB怎么进行多项式拟合_polyfit函数用法示例

MATLAB中可用polyfit函数实现多项式最小二乘拟合,支持基本拟合、误差估计、中心化缩放、交互式验证及多阶对比五种方法,分别适用于精度要求、数值稳定性、教学探索与过拟合识别等场景。 如果您在MATLAB中需要根据离散数据点构造一个多项式函数,使其在最小二乘意义上最优逼近原始数据,则可使用polyfit函数实现多项式拟合。以下是具体操作方法: 一、基本多项式拟合 该方法利用polyfit直接计...

如何在Python中为测试用例添加自定义标记_通过pytest.mark进行分类执行

pytest.mark 必须作为装饰器直接作用于测试函数或类,不可写在函数外部;可叠加多个标记,执行时用 -m "mark1 and mark2" 等布尔表达式筛选;未注册标记会触发警告,需在 pytest.ini 或 pyproject.toml 中声明以避免。 pytest.mark 能不能直接用在函数外面 不能。所有 pytest.mark 必须装饰在测试函数或类上,写在函数定义之外会报 S...
· Python · 77220

如何在Python中构建树状结构的递归生成器_使用yield from简化递归代码

yield from 在树遍历中省去了手动展开子生成器的繁琐与风险,自动处理委托调用、异常传播、StopIteration 捕获及协程方法转发,确保扁平化输出和行为一致性。 yield from 在树遍历中到底省了什么 直接说结论:yield from 不是语法糖,它把递归生成器的“委托调用”从手动循环 + yield 拆解成一条语句,避免了中间迭代器被提前耗尽、异常传播断裂、或 StopIter...
· Python · 257158