前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

作者头像
韩曙亮
发布于 2023-10-11 12:04:33
发布于 2023-10-11 12:04:33
49800
代码可运行
举报
运行总次数:0
代码可运行

一、Socket 套接字简介

1、Socket 套接字概念

Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ;

在 网络编程 中 , Socket 套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ;

2、Socket 套接字类型

套接字有两种类型 :

  • 流套接字 : 提供了一个可靠的、面向连接的通信机制 , 可以 顺序地传输数据。
    • TCP/IP 协议中,流套接字使用 TCP 协议进行数据传输。
  • 数据报套接字 : 提供了一种无连接、不可靠的通信机制 , 数据 以独立的数据包形式传输。
    • 在 TCP/IP 协议中,数据报套接字使用 UDP 协议进行数据传输。

3、Socket 套接字使用步骤

Socket 套接字使用步骤 :

  • 创建套接字 : 使用 套接字 API 创建一个套接字对象 , 一般由 编程语言 官方提供 标准 API ;
  • 绑定 IP 地址和端口号 : 将套接字与一个 IP 地址 和 端口号绑定 ;
  • 建立连接 :
    • 服务器端监听连接 : 对于流套接字,需要在服务器端监听客户端的连接请求 ;
    • 客户端建立连接 : 对于流套接字,客户端需要与服务器建立连接 ;
  • 发送和接收数据 : 使用 Socket 套接字 发送 或 接收 数据 ;
  • 关闭连接 : 数据传输完毕后,关闭 Socket 套接字连接 ;

4、Socket 套接字服务端与客户端

Socket 套接字 进行 数据通信时 , 需要有两个 Socket 套接字分别作为 客户端 和 服务器端 :

  • Socket 套接字 服务器端 : 需要 监听客户端的请求 , 可以 向 客户端 发送消息 , 可以接收来自客户端的消息 ;
  • Socket 套接字 客户端 : 需要主动连接 服务器端 , 可以 向 服务器端 发送消息 , 可以接收来自服务器端的消息 ;

一个 服务器端 可以 同时与 多个 客户端 进行 数据交互 ;

二、Socket 服务端与客户端开发

1、服务端

Socket 服务器端流程 :

  • 创建套接字 : 使用 套接字 API 创建一个套接字对象 , 一般由 编程语言 官方提供 标准 API ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1. 创建 socket 实例对象
import time
  • 绑定 IP 地址和端口号 : 将套接字与一个 IP 地址 和 端口号绑定 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 2. 为 socket 实例对象 绑定 IP 地址和端口号
# IP 地址是字符串类型, 端口号是 int 类型, 将这两个数据定义到元组中
socket_server.bind(("127.0.0.1", 8090))
  • 服务器端监听连接 : 对于流套接字,需要在服务器端监听客户端的连接请求 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 4. 阻塞等待连接 , 如果没有客户端连接 , 会一直阻塞在这里
    # accept 函数返回的是 二元元组 , 使用两个变量接收该元组
    # conn 是连接的 socket 对象
    # address 是连接的 地址
    client_socket, client_address = socket_server.accept()
  • 发送和接收数据 : 使用 Socket 套接字 发送 或 接收 数据 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 向客户端发送连接成功提示
    client_socket.send("你好, 客户端!".encode("UTF-8"))
  • 关闭连接 : 数据传输完毕后,关闭 Socket 套接字连接 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 关闭连接
    client_socket.close()

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
Socket 服务器 代码示例
"""

# 导入 socket 模块
import socket

# 1. 创建 socket 实例对象
import time

socket_server = socket.socket()

# 2. 为 socket 实例对象 绑定 IP 地址和端口号
# IP 地址是字符串类型, 端口号是 int 类型, 将这两个数据定义到元组中
socket_server.bind(("127.0.0.1", 8090))

# 3. 服务器端监听端口
# 传入的参数是一个整数 , 该参数表示允许连接的数量
# 如果连接已满后面的连接请求会等待
socket_server.listen(100)


while True:
    # 4. 阻塞等待连接 , 如果没有客户端连接 , 会一直阻塞在这里
    # accept 函数返回的是 二元元组 , 使用两个变量接收该元组
    # conn 是连接的 socket 对象
    # address 是连接的 地址
    client_socket, client_address = socket_server.accept()

    # 向客户端发送连接成功提示
    client_socket.send("你好, 客户端!".encode("UTF-8"))
    print(f'客户端连接成功 {client_address}')

    # 5. 服务器端与客户端进行交互
    while True:
        # 循环接收客户端数据, 并使用 UTF-8 解码
        data = client_socket.recv(1024).decode("UTF-8")

        # 向客户端会送消息
        client_socket.send(f"服务端已收到: {data}".encode())
        print(f"客户端: {data}")

        if data == 'quit':
            break

    # 关闭连接
    client_socket.close()
    print(f'客户端连接关闭 {client_address}')

2、客户端

Socket 客户端流程 :

  • 创建套接字 : 使用 套接字 API 创建一个套接字对象 , 一般由 编程语言 官方提供 标准 API ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1. 创建 socket 实例对象
client_socket = socket.socket()
  • 通过 IP 地址和端口号 连接服务器 :
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 2. 客户端连接服务器, IP 地址和端口号放在元组中
client_socket.connect(('127.0.0.1', 8090))
  • 发送和接收数据 : 使用 Socket 套接字 发送 或 接收 数据 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 发送数据到服务器
client_socket.send('你好, 服务器!'.encode())
  • 关闭连接 : 数据传输完毕后,关闭 Socket 套接字连接 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 4. 关闭连接
client_socket.close()

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket

# 创建TCP socket对象
import time

# 1. 创建 socket 实例对象
client_socket = socket.socket()

# 2. 客户端连接服务器, IP 地址和端口号放在元组中
client_socket.connect(('127.0.0.1', 8090))

# 3. 向服务器端发送消息和接收消息
# 发送数据到服务器
client_socket.send('你好, 服务器!'.encode())
print("客户端发送: 你好, 服务器!")

time.sleep(1)
# 接收服务器数据
data = client_socket.recv(1024).decode("UTF-8")
print(f"服务端: {data}")

# 获取命令行输入发送给客户端
while True:
    command = input("请输入: ")
    client_socket.send(command.encode())
    print(f"客户端发送: {command}")
    if command == 'quit':
        break

    # 接收服务器数据
    data = client_socket.recv(1024).decode("UTF-8")
    print(f"服务端: {data}")

# 4. 关闭连接
client_socket.close()
print("客户端关闭")

3、执行结果

先启动服务器端 :

启动客户端 :

此时服务器端信息如下 :

客户端中断输入 1 :

服务器端效果 :

客户端继续输入信息 :

服务器端信息如下 :

客户端输入 quit 关闭连接 :

服务器端对应的数据 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
掌握Python的网络编程:套接字编程入门
随着互联网的快速发展,网络编程成为了现代软件开发中不可或缺的一部分。Python作为一种广泛使用的编程语言,提供了丰富的库和工具,使得网络编程变得简单而强大。本文将详细介绍Python中的套接字编程,帮助您入门网络编程。
网络技术联盟站
2023/07/13
2410
Python 套接字详解:与网络通信的温柔邂逅
网络世界,犹如一片无垠的海洋,充满了无限的可能性和无尽的探索。而在这个浩瀚的网络宇宙中,Python 语言以其简洁优雅、功能丰富而备受青睐。在 Python 的世界里,有一个神奇的工具,它就像是一座桥梁,将不同的计算机连接起来,实现数据的传输和通信,它就是套接字(Socket)。
繁依Fanyi
2024/02/07
1370
Python系列(十二):Python 网络编程:构建互联互通的世界
今天推荐的文章【Linux工具|split分割文件后增加后缀名称(后记)】,作者【Aion】,二话不说上链接:https://cloud.tencent.com/developer/article/2470895 ,这篇文章深入介绍了linux中怎么给用spilt分割的文件加后缀名。
我是黑桃A
2024/12/05
770
Python系列(十二):Python 网络编程:构建互联互通的世界
【从零学习python 】77. TCP服务端编程及注意事项
全栈若城
2024/02/29
1350
网络编程中的TCP和UDP
TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
@小森
2024/07/25
1420
网络编程中的TCP和UDP
Python 开发web服务器,多进程优化
前面写了两个篇章,主要介绍了使用tcp开发web服务器的功能。 Python 开发Web静态服务器 - 返回固定值:胖子老板,来包槟榔 Python 开发web服务器,返回HTML页面
Devops海洋的渔夫
2019/05/31
4.7K1
python用tcp实现局域网内文件传输
功能: 可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件. 实现需求: 安装socket模块 简单了解sokcet模块用法
py3study
2020/01/10
2.3K0
Python 实战TCP的服务端 - 胖子老板就是服务端
client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)
Devops海洋的渔夫
2019/06/02
7350
python实现两台不同主机之间进行通信(客户端和服务端)——Socket
先简单给大家介绍一下什么是socket,socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信。
Python研究者
2021/08/31
2.5K0
【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程
Socket 套接字,是由系统提供用于网络通信的技术,是基于 TCP/IP 协议的网络通信的基本操作单元。基于Socket 套接字的网络程序开发就是网络编程。
小皮侠
2024/10/27
1830
【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程
30天拿下Python之使用网络
在上一节,我们介绍了如何在Python中使用Json,包括:Json序列化、Json反序列化、读Json文件、写Json文件、将类对象转换为Json、将Json转换为类对象等内容。在这一节,我们将介绍如何在Python中使用网络。Python网络编程覆盖的范围非常广,包括:套接字编程、socketserver、HTTP和Web开发、异步编程和asyncio等。在本专栏中,我们将只介绍比较基础的套接字编程和socketserver。
用户6256742
2024/06/30
1200
用 Python 来实现客户端或服务器(TCP/IP 协议)
用 Python 来实现创建一个简单的客户端或服务器,可以使用 Python 的内置库 socket。这个库提供了对底层 TCP/IP 协议的访问,可以用来编写网络程序。
时代疯
2025/01/22
1440
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
在当今高度互联的世界中,不同设备间的数据交换变得日益频繁。无论是简单的客户端-服务器架构,还是复杂的分布式系统,都需要一种可靠的方式来实现节点间的通信。Python内置的socket模块正是为此而生,它提供了底层的网络访问接口,允许我们直接控制数据包的发送与接收过程,从而实现自定义的网络协议设计。这使得socket成为开发各类网络应用时不可或缺的一部分。
科技新语
2024/10/24
4030
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
Python 实战:文件下载功能
客户端:请求需要下载的文件名,然后从服务端根据返回的数据,写成一个文件 服务端:根据客户端发送过来的需要下载的文件名,返回该文件的内容数据
Devops海洋的渔夫
2019/06/02
8160
Python 开发web服务器,socket非堵塞模式
在开发web服务器接受http请求的时候,socket在recv等待接受数据的时候,服务端是堵塞的。 用于等待http发送过来的数据。 那么这个等待,其实也是会占用服务端的资源的。 为了节省这个资源,可以采用非堵塞的方式来进行socket等待监听,就是每次轮询监听一下,并不会堵塞等待。
Devops海洋的渔夫
2019/05/31
1.1K0
python网络编程中的线程-多线程客户端编程
在Python网络编程中,多线程客户端编程是一项重要的技能。使用多线程,客户端可以同时向服务器发送多个请求,而无需等待先前的请求响应。
玖叁叁
2023/04/21
7060
UDP套接字编程——Python语言描述
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88639774
zy010101
2019/05/25
7620
Python网络编程:构建网络应用与通信
Python是一门强大的编程语言,具备出色的网络编程能力。无论您是构建Web应用、实现网络通信还是创建分布式系统,Python都提供了丰富的工具和库来简化网络编程任务。本文将深入探讨Python网络编程的基础知识、创建服务器和客户端应用程序、以及常见的网络通信模式,同时附带详细的代码示例。
海拥
2023/09/19
2900
Python网络编程:构建网络应用与通信
python udp编程_Python核心编程
实际遇到需要解决问题真是最好的老师,断更了两天,主要还是自己贪玩了,没有把握好时间,另外就是我一直在研究怎么入手通过SFP光口来控制高精度电源。
全栈程序员站长
2022/10/04
1.3K0
Python简单实现Web服务器
import socket import re import gevent from gevent import monkey monkey.patch_all()# 识别等待时间,让协程切换 def client_handler(client_socket): '''接收客户端链接请求,响应对应的的数据''' # 接收数据 request_data = client_socket.recv(4096) # 判断是否接收到数据 if not request_da
py3study
2020/01/06
1.1K0
推荐阅读
相关推荐
掌握Python的网络编程:套接字编程入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文