Python Socket网络编程

这篇具有很好参考价值的文章主要介绍了Python Socket网络编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Socket概念

Python Socket编程

发送接收缓冲  消息格式定义


Socket概念

 Socket套接字,一种独立于协议的网络编程接口,就是对网络中不同主机上的应用进程之间进行双向通信的端点。

TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket)。

IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。 能够唯一标示网络中的进程后,它们就可以利用socket进行通信了

 Python Socket网络编程

Python Socket网络编程

Python Socket编程

使用python内置的socket库,目前socket编程,最多是通过tcp协议进行网络通讯的。

tcp进行通讯的程序双方,分为服务端和客户端。

tcp协议进行通讯的双方,是需要先建立一个虚拟连接的,然后双方程序员才能发送业务数据信息。

服务端需要四个步骤:

        1.新建socket

        2.绑定IP和端口号

        3.监听连接

        4.收发消息

客户端需要三个步骤:

        1.新建socket

        2.连接服务器端

        3.发收消息

Python Socket网络编程

服务端比客户端先运行,服务端先运行然后等待客户端连接

#TCP 服务端端程序 server.py
#导入socket库
from socket import *
#主机地址为0.0.0.0,表示绑定本机所有网络接口ip地址
#等待客户端来连接
IP='127.0.0.1'
#端口号
PORT=50000
#定义一次从socket缓冲区最多读入512个字节数据
BUFLEN=512

#实例化一个socket对象
#参数 AF_INET 表示该socket网络层使用IP协议
#参数 SOCK_STREAM 表示该socket传输层使用tcp协议
listenSocket=socket(AF_INET,SOCK_STREAM)

#socket绑定地址和端口
listenSocket.bind((IP,PORT))

#使socket处于监听状态,等待客户端的连接请求
#调用了.listen,就把socket置于等待连接状态
#参数5表示 最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f'服务端启动成功,在{PORT}端口等待客户端连接...')

#接收客户端连接,无客户端连接时,就处于睡眠状态
dataSocket,addr=listenSocket.accept()
print('接受一个客户端连接:',addr)

while True:
    #尝试读取对方发送的消息
    #BUFLEN 指定从接收缓冲里最多读取多少字节
    recved=dataSocket.recv(BUFLEN)

    #如果返回空bytes,表示对方关闭了连接
    #退出循环,结束消息收发
    if not recved:
        break

    #读取的学节数据是bytes类型,需要解码为字符串
    info=recved.decode()
    print(f'收到对方信息:{info}')

    #发送的数据类型必须是bytes,所以要编码
    dataSocket.send(f'服务端接收到了信息{info}'.encode())

#服务端也调用close()关闭socket
dataSocket.close()
listenSocket.close()
#TCP 客户端程序 client.py
from socket import *
IP='127.0.0.1'
SERVER_PORT=50000
BUFLEN=512

#实例化一个socket对象,指明协议
dataSocket =socket(AF_INET,SOCK_STREAM)

#连接服务端socket
dataSocket.connect((IP,SERVER_PORT))

while True:
    #从终端读入用户输入的字符串
    toSend =input('>>>')

    # 退出,跳出循环
    if toSend =='exit':
        break

    #发送消息,也要编码为 bytes
    dataSocket.send(toSend.encode())

    #等待接收服务段的消息,如果没有消息就一直等待
    recved=dataSocket.recv(BUFLEN)

    #如果返回空bytes,表示对方关闭了连接
    if not recved:
        break

    #打印读取的信息
        print(recved.decode())
dataSocket.close()

运行代码之前,先查看的有没有处于50000的端口,然后执行server.py再查看端口,然后执行client.py再查看端口。

Python Socket网络编程

 建立连接后,就能收发信息了

Python Socket网络编程Python Socket网络编程

发送接收缓冲  消息格式定义

编程的时候,如果要跟某个IP建立连接,我们需要调用操作系统提供的 socket API

socket 在操作系统层面,可以理解为一个文件。我们可以对这个文件进行一些方法操作

  • listen方法,可以让程序作为服务器监听其他客户端的连接。
  • connect,可以作为客户端连接服务器。
  • sendwrite可以发送数据,recvread可以接收数据。

在建立好连接之后,如果我们想给远端服务发点什么东西,那就只需要对这个文件执行写操作就行了。

剩下的发送工作自然就是由操作系统内核来完成了。

既然是写给操作系统,那操作系统就需要提供一个地方给用户写。同理,接收消息也是一样。这个地方就是 socket 缓冲区

  • 用户发送消息的时候写给 send buffer(发送缓冲区)
  • 用户接收消息的时候写给 recv buffer(接收缓冲区)

也就是说一个socket ,会带有两个缓冲区,一个用于发送,一个用于接收。因为这是个先进先出的结构,有时候也叫它们发送、接收队列

 在企业中开发的程序通信,消息往往有格式定义。消息的格式定义可以归入OSI中的表示层

比如:定义的消息,包括消息头和消息体。

消息头存放消息的数据格式(消息的长度、类型、状态等),消息体存放具体传送的数据。

对于TCP协议传输信息的程序来说,格式一定要有明确规定的消息边界。因为TCP传输的是字节流(bytes stream),如果消息中没有指定边界或者长度,接收方就不知道完整的消息从字节流的哪里开始,到哪里结束。

指定消息的边界有两种方式:

        1.用特殊字节作为消息的结尾符号

           可以用消息中不易出现的字符串(比如 FFFFFF)作为消息的结尾字符

        2.在消息开头某个位置,直接指定消息的长度

            UDP协议通常不用指定边界,因为UDP是数据报协议,应用程序从socket接收到的

            必定是发送方发送的完整消息。{:.notice-info}文章来源地址https://www.toymoban.com/news/detail-466610.html

到了这里,关于Python Socket网络编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中两种网络编程方式:Socket和HTTP协议

    本文分享自华为云社区《Python网络编程实践从Socket到HTTP协议的探索与实现》,作者:柠檬味拥抱。 在当今互联网时代,网络编程是程序员不可或缺的一项技能。Python作为一种高级编程语言,提供了丰富的网络编程库,使得开发者能够轻松地实现各种网络应用。本文将介绍P

    2024年04月16日
    浏览(42)
  • Python网络编程基础之ip地址,端口号,TCP,socket

    IP地址 IP地址 (Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 换而言之,IP 地址就是标识网络中设备的一个地址,好比

    2024年02月02日
    浏览(42)
  • python 学习之 socket 库的基本使用(网络编程-套接字)

    目录 一、关于 socket 的介绍 二、创建套接字对象(Socket 的实例化) 三、套接字对象方法(Socket 常用函数) 1、bind 函数 2、listen 函数 3、accept 函数 4、connect 与 connect_ex 函数 5、send 、 sendall 、sendto 函数 6、recv 与 recvfrom 函数 7、close 函数 三、简单的服务端和客户端示例 四、

    2024年02月20日
    浏览(62)
  • python网络编程:通过socket实现TCP客户端和服务端

    目录 写在开头 socket服务端(基础) socket客户端(基础) 服务端实现(可连接多个客户端)  客户端实现 数据收发效果   近期可能会用python实现一些网络安全工具,涉及到许多关于网络的知识,逃不过的就是最基本的socket。本文将介绍如何通过python自带的socket库实现TCP客户

    2024年03月21日
    浏览(56)
  • 【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

    Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ; 在 网络编程 中 , Socket 套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ; 套接字有两种类型 : 流套接字 : 提供了一个可

    2024年02月15日
    浏览(153)
  • Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

    Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现 IP(Internet Protocol) 地址是唯一标识互联网上连接至计算机或其他设备的地址。每一个设备在 IP 网络中拥有一个不同的 IP 地址,它由 32 位二进制数组成,通常表示为四个从 0 到 255 的十进制数之间用 (.)

    2024年02月04日
    浏览(64)
  • 【socket】从计算机网络基础到socket编程——Windows && Linux C语言 + Python实现(TCP+UDP)

    简单讲一下基础知识,便于后面代码的理解,建议大概浏览一下这一小节内容。这里讲的只是冰山一角,建议大家学习计算机网络相关知识,推荐几本书: 《计算机网络》(谢希仁) 《计算机网络 自顶向下方法》 《计算机网络技术》 《计算机网络基础及应用》 《Linux C从入

    2024年02月08日
    浏览(60)
  • python网络编程:处理socket报错“ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。”的问题

    由于这个问题网上的资料特别少,所以在这里记录一下。 当使用socket以udp形式向对方发送数据时(局域网),如果对方的ip和端口未开启,导致未接收,然后使用socket接收时就会出现一串报错信息 产生这个信息的原因是因为发送的信息没有传输成功,而报错的提示会产生在之

    2024年02月09日
    浏览(42)
  • 【网络编程】TCP Socket编程

    流套接字: 使用传输层TCP协议 TCP: 即Transmission Control Protocol(传输控制协议),传输层协议。 TCP的特点: 有连接 可靠传输 面向字节流 有接收缓冲区,也有发送缓冲区 大小不限 ServerSocket 是 创建TCP服务端Socket 的API。 注意: ServerSocket 只能用于 服务器端。 构造方法: 方法签名

    2024年02月07日
    浏览(49)
  • 【网络编程】网络编程 和 Socket 套接字认识

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:

    2023年04月15日
    浏览(143)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包