Python 网络编程

python笔记----客户端与服务端 python简单服务端与客户端编写编写前的基础了解python 提供了两个级别访问的网络服务。:低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。什么是 Socket?Socket被称”套接字”,应用程序通常通过 阅读详情

Python 网络编程

Python 提供了两个级别访问的网络服务。:
         今天主讲: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。

          了解一下:  高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发

socket是什么

             Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

         Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议

所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

tcp: 可靠,有状态的,长连接的协议,像打电话一样
udp: 不可靠,无连接,像发短信一样。发送的包的顺序要有编号


socket()函数

    Python 中,我们用 socket()函数来创建套接字

语法: socket.socket([family[, type[, proto]]])

参数:

      family: 套接字家族可以使AF_UNIX或者AF_INET
      type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
      protocol: 一般不填默认为0.

Socket 对象(内建)方法: 

 一. 服务器端套接字: 

s.bind()   :     绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址。

s.listen()    :开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。

s.accept()   :被动接受TCP客户端连接,(阻塞式)等待连接的到来

二 . 客户端套接字

 s.connect() 主动初始化TCP服务器连接,。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

三. 公共用途的套接字函数

s.recv() 接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他      信息,通常可以忽略。

s.send()      发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能           小于string的字节大小。
s.sendall() 完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前          会尝试发送所有数据。成功返回None,失败则抛出异常。

s.close() 关闭套接字

   实列:    服务端  代码

import socket   #首先到入模块

#1.创建服务端
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.绑定IP和端口
server.bind(("192.168.0.193",8000))
#2.5 设置最大挂起链接数
server.listen(5)
print("服务端,启动等待客户端链接...")
#3.等待客户端连接  如果有链接 将返回一个链接对象和对方的地址
conn,address = server.accept()
while True:
    #4.接收客户端发过来 多大字节的数据
    msg = conn.recv(1024)
    print("客户端: ",msg.decode())   #把接收的bytes转出去
    #5.给客户端回复数据
    conn.sendall(input('服务端: ').encode('utf-8'))
#6.结束了,直接关闭服务器
conn.close()
server.close()

客户端 代码

import socket

#1.创建客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.建立链接
client.connect(("192.168.0.193",8000))
print("客户端,成功连接服务器 n 结束")
while True:
    msg = input("客户端: ")
    if msg.__eq__('n'): break
    # 3.发消息  格式是: bytes     以utf-8的字符集去转成bytes
    client.send(msg.encode('utf-8'))
    #等待回应  并读取回复
    msg = client.recv(1024)
    print('服务器: ',msg.decode())
#关闭连接
client.close()
                             注:  先启动服务端,在启动客户端

这个代码就好比,一个人有俩个手机在进行聊天,有点意思


群聊:  适合很多的

    也是分客户端,和服务端的   先来服务端

#群聊的服务端
import socket,threading

#1.创建服务端
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.绑定IP和端口
server.bind(("192.168.199.228",8000))
#2.5 设置最大挂起链接数
server.listen(5)
print("服务端,启动等待客户端链接...")


#中间转换数据的变量
message = ''

#创建一把锁
lock = threading.Lock()
Cond = threading.Condition(lock=lock)
#主要代码 不停的收  不停的发
def recv_msg(conn,adress):
    while True:
       global  message
       msg = conn.recv(1024)
       Cond.acquire()  # 上锁
       message = str(address)+':'+msg.decode()
       print('收到: ',message)
       Cond.notify_all()    #唤醒其他给我发消息的线程
       Cond.release()   #释放锁

def send_msg(conn,address):
    global message
    while True:
        Cond.acquire()
        Cond.wait()
        Cond.release()
        conn.sendall(message.encode('utf-8'))
        print('发送'+message)
#为每一个连接着提供收和发的线程
while True:
    conn, address = server.accept()
    threading._start_new_thread(recv_msg,(conn,address))  #不停的收
    threading._start_new_thread(send_msg,(conn,address))   #不停的发

  客户端:   

#创建客户端
import socket,threading

#1.创建客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.建立链接
client.connect(("192.168.199.228",8000))
#收取其他用户数据
def recv_msg():
    while True:
        msg = client.recv(1024)
        print("收到: ",msg.decode())

threading._start_new_thread(recv_msg,())
#不停的发
while True:
    msg = input('请数据信息: ')
    client.send(msg.encode('utf-8'))

勤学苦练!!!!

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写? 如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处, 阅读详情

相关推荐

保姆级教程:在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV(从BIOS到虚拟机配置)

本文提供在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV的详细教程,涵盖BIOS设置、固件配置、驱动优化及虚拟机部署。通过SR-IOV技术,显著提升虚拟化环境中的网络性能,适用于高性能计算、AI训练等场景。

weixin_26934905的博客 455

经常打游戏、刷视频,却不了解它们底层的通信机制吗?来我给你聊清楚Python Socket通信原理

经常打游戏、刷视频,却不了解它们底层的通信机制吗?来我一篇给你聊清楚Python Socket通信原理

看,未来的博客 4033

Maya ACES工作流程配置(Arnold 及 RedShift 贴图配置规范-还原出SP-Aces流程下贴图正确的效果) PS还原Aces流程下渲染的图

*如果使用SP,项目工程如果新建的时候设置的就是Aces的流程的话,按规范正常导出即可,贴图会带上相对应的后缀,然后贴图导入材质球的时候会根据后缀自动设置相对应的色彩空间;**万一不是,就自己手动设置一下对应的色彩空间即可;然后点击选择当前的或者选择全部导入的贴图,点击右下角后,开始转换;我复制了一下,一个默认没有LUT的效果,然后另外一个是加载2个LUT后的还原效果,和渲染的效果应该是没有区别的,至少我没有看出明显的区别;把需要转换的贴图拖拽到左侧,然后右面选择需要转换到的相对应的色彩空间;...

Yuulily 7998

python之socket

python之socket 一、初识socket         socket 是网络连接端点,每个socket都被绑定到一个特定的IP地址和端口。IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36,76);端口数值的取值范围是0~65535。端口数小于1024的都是为众所周知的网络服务所保留的 (例如Web服务使用的80端口);最大的保留

chengxuyuanyonghu的专栏 2919

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决‘时依性混杂’这个老大难问题

本文探讨边缘结构模型(MSM)如何解决时依性混杂问题,适用于临床试验和互联网AB测试。通过逆概率加权(IPTW)等方法,MSM能有效剥离混杂效应,准确评估长期干预效果。文章结合跨领域案例,详细解析MSM的核心原理、实施步骤及在推荐算法效果评估中的实战应用,帮助读者掌握这一先进因果推断工具。

weixin_28725949的博客 208

java socket构造_浅谈 Java Socket 构造函数参数 backlog

ServerSocket APIAPI:java.net.ServerSocket 1.0ServerSocket(int port, int backlog)创建一个监听端口的服务器套接字ServerSocket() 1.4创建一个未绑定的服务器套接字void bind(SocketAddress endpoint, int backlog) 1.4把服务器套接字绑定到指定套接字地址上注意bin...

weixin_29342901的博客 441

Arcmap计算土方量教程

1. 创建现状TIN 结果数据: 2. 创建设计TIN 结果数据: 注意:现状TIN和设计TIN构建时候的坐标系不同,设置坐标系见最后的注意事项第1点,就是import(导入)那步骤,现状TIN构建时选择高程点数据或者等高线数据,设计TIN构建时候选择洱海面数据 3. TIN转栅格 改成你要存的数据库,注意中间不要有汉字 结果数据(设计TIN转栅格的同理) 4. 裁剪现状TIN转成的栅格 结果数据: 5. 计算土方量 结果数据: ...

欢迎关注,共同进步! 5015

Python高阶进程3--网络编程

Python 网络编程 Python 提供了两个级别访问的网络服务。: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。什么是 Socket? Socket又称”套接字”,应用程序通常通过”套接字”向网络

MolinOne 306

阿里云百炼接入本地Claude,接入idea

阿里云百炼平台提供两种接入方式:未购买套餐时使用通用API Key(sk-xxxxx),需注意免费额度独立计算且不会自动切换模型;购买Coding Plan套餐后使用专属API Key(sk-sp-xxxxx),享受固定月费无超支风险。配置需在.claude/settings.json中设置认证信息,包括API Key和Base URL。建议开启"用完即停"功能避免意外扣费,不同模型的免费额度互不影响。购买套餐后还可通过IDEA插件Claude Code进行集成,实现固定费用下的稳定使用

fengtangjiang的博客 1363

保姆级教程:用YOLOv11和CRNN从零搭建一个车牌识别系统(附完整代码)

本文提供了一份详细的YOLOv11和CRNN实战指南,教你从零搭建高精度车牌识别系统。内容包括环境配置、数据集处理、模型训练与优化,以及系统集成与性能优化技巧,附完整代码实现。特别介绍了YOLOv11在车牌检测中的创新应用和CRNN在车牌识别中的关键技术。

weixin_28358083的博客 321

Python网络编程

文章目录引入1 TCP编程 引入   首先了解以下基本概念:   1)计算机网络是把各个计算机连接到一起,让网络中的计算机可以互相通信。   2)网络编程是在程序中实现两台计算机的通信。   3)Python进行网络编程时,实际上是在Python程序本身这个进程内,连接到指定服务器进程的通信端口进行通信,所以网络通信可以看作是两个进程之间的通信。   4)Socket是网络编程的一个抽象概念,通常用一个Socket表示打开了一个网络链接,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议

因吉的博客 3617

KEPServerEX 6 之 GE Ethernet 连接FANUC ROBOT机器人实战

GE Fanuc是GE公司控制系统部门的一部分,成立于1998年。其主要业务涵盖工业自动化、控制系统、PLC和组态软件等领域。其产品可用于包括自动化、过程自动化、国防、汽车制造、通讯、医疗和航空航天等各种工业领域2009 8月 GE和FANUC今天宣布两家公司已同意解除合资企业GE FANUC自动化公司。通过以上历史,GE Ethernet Driver 当下还支持对接FANUC ROBOT机器人 就不奇怪了。

-雲飛兄-博客 1795

Python语言的网络编程

Python作为一种简单易学的编程语言,其丰富的标准库和第三方库使得网络编程变得高效而灵活。无论是建立简单的客户端和服务器,还是开发复杂的Web应用和网络爬虫,Python都有很好的支持。通过本文的介绍,我们涵盖了Python网络编程的基础知识、常用库及一些实际示例。希望对你同样感兴趣的网络编程之路有所帮助!无论你是初学者还是有经验的开发者,Python都是一个值得学习的网络编程语言。

2501_90199683的博客 555

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【python】python进阶——网络编程

Python网络编程指南:从基础到实践 本文系统介绍了Python网络编程的核心知识。首先阐述了网络编程基础概念,包括IP地址、端口和协议等关键要素。重点讲解了Socket编程,详细展示了TCP/UDP Socket的创建、服务器/客户端工作流程及代码实现。

weixin_51924657的博客 1370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python网络编程

简介 网络编程就是在程序中实现网络中两台计算机的通信。而用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。 初识Socket Socket(又称套接字)起源于Unix,是应用层与TCP/IP协议族通信的中间软件抽象层。复杂的TCP/IP协议族隐藏在了Socket接口内部,用户只需要简单地使用Socket接口来进行网络编程。应用程序通常...

Trophy's Blog 3345

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python网络编程技术

本文系统介绍了Python网络编程的核心知识,涵盖网络基础概念、协议原理、Socket编程、并发处理和安全优化等关键内容。主要内容包括:1.网络编程基础(IP/端口、C/S模型);2.常用协议解析(TCP/UDP/HTTP/WebSocket);3.Python网络编程实践(socket模块、requests库);4.高级技术(多线程/异步IO/Web应用开发);5.安全与性能优化建议。文章提供了从基础到进阶的学习路径,包含多个实战项目建议(聊天服务器、下载管理器等)和学习资源推荐,帮助开发者掌握构建网络应

yun_kumo1028的博客 1111

python网络编程攻略-Python网络编程攻略

python网络编程攻略由著名软件架构师M.O.Faruque.Sarker博士编著。是python网络编程领域一本很棒的探索性指南手册。python是门很受欢迎的编程语言,据小编知,在IEEE发布2017年编程语言排行榜中Python高居首位。随着Python的大热,学习者络绎不绝,选择合适的学习的资料是很重要的。python网络编程攻略介绍了现实世界中几乎所有网络任务的真实示例,通过简明易懂的...

weixin_37988176的博客 755

python 网络编程

既然是做爬虫开发,必然需要了解Python网络编程方面的知识。计算机网络是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。例如当你使用浏览器访问谷歌网站时,你的计算机就和谷歌的某台服务器通过互联网建立起了连接,然后谷歌服务器会把把网页内容作为数据通过互联网传输到你的电脑上。网络编程对所有开发语言都是一样的,Python也不例外。

爱死亡机器人 1206
上一篇: python:线程
下一篇: 回顾...
Hao_python
博客等级 码龄9年 5粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值