Python socket如何实现服务端和客户端数据传输(TCP)

Python socket是一个可以实现网络应用的库,可以用来实现数据传输,包括TCP和UDP协议。下面将详细讲解如何使用Python socket实现TCP协议的服务端和客户端数据传输。

实现TCP协议的服务端和客户端数据传输

TCP服务端

  1. 导入socket库
import socket
  1. 创建socket对象并指定协议
serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • socket.AF_INET:指定ipv4协议
  • socket.SOCK_STREAM:指定TCP协议

  • 绑定IP和端口

serv_sock.bind(('127.0.0.1', 8000))
  • 127.0.0.1:本地IP地址
  • 8000:自定义的端口号

  • 开始监听,并设置最大连接数

serv_sock.listen(5)
  • 5:最大连接数

  • 等待客户端连接,并返回一个socket对象和客户端地址信息

while True:
    conn_sock, conn_addr = serv_sock.accept()
  1. 接收客户端发送的数据
data = conn_sock.recv(1024)
  • 1024:每次最大接收数据量

  • 发送数据给客户端

conn_sock.send(b"Hello World!")
  1. 关闭socket对象
conn_sock.close()
serv_sock.close()

TCP客户端

  1. 导入socket库
import socket
  1. 创建socket对象并指定协议
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • socket.AF_INET:指定ipv4协议
  • socket.SOCK_STREAM:指定TCP协议

  • 连接服务端地址

client_sock.connect(('127.0.0.1', 8000))
  • 127.0.0.1:服务端IP地址
  • 8000:服务端自定义的端口号

  • 发送数据给服务端

client_sock.send(b"Hello World!")
  1. 接收服务端发送的数据
data = client_sock.recv(1024)
  • 1024:每次最大接收数据量

  • 关闭socket对象

client_sock.close()

示例说明

下面给出两条示例说明:

示例1:服务端和客户端通过Python socket实现简单聊天发送消息

服务端代码:

import socket

serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_sock.bind(('127.0.0.1', 8000))
serv_sock.listen(5)

while True:
    conn_sock, conn_addr = serv_sock.accept()
    print('Connected by', conn_addr)
    while True:
        data = conn_sock.recv(1024)
        if not data: break
        print('[Client]', data.decode('utf-8'))
        msg = input('[Server] ')
        conn_sock.send(msg.encode('utf-8'))
    conn_sock.close()
serv_sock.close()

客户端代码:

import socket

client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8000))

while True:
    msg = input('[Client] ')
    client_sock.send(msg.encode('utf-8'))
    data = client_sock.recv(1024)
    print('[Server]', data.decode('utf-8'))

client_sock.close()

示例2:通过Python socket实现文件传输

服务端代码:

import socket

serv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_sock.bind(('127.0.0.1', 8000))
serv_sock.listen(5)

while True:
    conn_sock, conn_addr = serv_sock.accept()
    print('Connected by', conn_addr)
    with open('receive.txt', 'wb') as f:
        while True:
            data = conn_sock.recv(1024)
            if not data: break
            f.write(data)
    print('Finished receiving')
    conn_sock.close()
serv_sock.close()

客户端代码:

import socket

client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8000))

with open('send.txt', 'rb') as f:
    while True:
        data = f.read(1024)
        if not data: break
        client_sock.send(data)

print('Finished sending')
client_sock.close()

以上就是Python socket实现服务端和客户端数据传输的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python socket如何实现服务端和客户端数据传输(TCP) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • javascript数据类型示例分享

    JavaScript数据类型示例分享 在JavaScript中,共有6种原始数据类型和1种引用类型。以下是每种数据类型的示例及其说明。 1. 原始数据类型 1.1 数字类型(Number) JavaScript中的数字类型是一个非常常用的数据类型,表示数字,它可以是整型或浮点数。 示例1: let num1 = 100; // 整型 let num2 = 3…

    other 2023年6月27日
    00
  • mysqldumper

    mysqldumper:轻松备份MySQL数据库的利器 什么是mysqldumper mysqldumper是一款针对MySQL数据库的备份工具,它可以帮助网站管理员轻松地备份和还原MySQL数据库。mysqldumper提供了一系列易于使用的功能,使其备份和还原这些重要数据变得非常简单。 mysqldumper的功能特色 备份和还原MySQL数据库:mys…

    其他 2023年3月28日
    00
  • iOS无障碍适配西瓜视频Voice Over实践示例

    iOS无障碍适配西瓜视频Voice Over实践示例 背景介绍 随着移动设备使用的普及,越来越多的人选择在手机、平板上观看视频。然而,对于少数视力有障碍的用户,这一体验却相当可怕,他们需要依靠现有无障碍功能才能正常使用智能手机。因此,为了让更多用户能够顺利使用产品,对iOS设备做无障碍适配,是非常有必要的。 Voice Over介绍 Voice Over是i…

    other 2023年6月26日
    00
  • 如何理解Vue的作用域插槽的实现原理

    如何理解Vue的作用域插槽的实现原理 Vue的作用域插槽是一种强大的特性,它允许我们在父组件中定义模板,并将子组件的内容插入到模板中的特定位置。这样可以实现更灵活的组件复用和定制化。 实现原理 Vue的作用域插槽的实现原理可以分为以下几个步骤: 父组件定义插槽模板:父组件通过<slot>标签定义插槽模板,并可以在标签中添加属性来指定插槽的名称。 …

    other 2023年8月20日
    00
  • conceptdrift(概念漂移)

    Concept Drift (概念漂移) 什么是Concept Drift? 在机器学习和数据挖掘领域,Concept Drift (概念漂移) 是指数据的分布或者特征的分布随时间发生了变化,导致原有的模型失去了预测力。这种数据分布发生变化的情况可能来自于新的数据生成机制,也可能是由于数据收集的环境发生了变化。因为Concept Drift的存在,使得机器学…

    其他 2023年3月28日
    00
  • Ae怎么自定义图层? ae图层重命名的教程

    Ae怎么自定义图层? 在ae中,我们可以通过自定义图层来实现更加丰富多样的效果。接下来我将为大家讲解如何自定义图层。 首先,在ae中选择你想要自定义的图层,然后在图层面板上右键点击选择“新建空白图层”。 点击“新建空白图层”,会跳出一个“新建图层”窗口,在这个窗口中,你可以自定义你的图层,比如图层的名称、宽度和高度等等,最后点击“确定”即可完成自定义图层。 …

    other 2023年6月25日
    00
  • axios发送post请求 提交图片类型表单数据方法

    以下是关于“axios发送post请求提交图片类型表单数据方法”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 在Web开发中,表单数据是种常见的数据类型,它通常用于向服务器提交数据。表单数据可以包含文本、数字、日期等类型的数据,也可以包含文件类型的数据,例如图片、音频和视频等。在使用axios发送post请求时,如果需要提交图片类型的表单数据,需要使…

    other 2023年5月7日
    00
  • 将python打包后的exe还原成py

    将Python打包后的exe还原成py的过程是不可逆的,因为exe文件是经过编译和打包的,已经丢失了源代码的信息。因此,无法完全还原成原始的.py文件。然而,我可以提供一些方法来反向工程exe文件,以获取一些可读的代码或者逆向工程的相关信息。 方法一:使用反编译工具一种常见的方法是使用反编译工具,如uncompyle6或pyinstxtractor,来尝试将…

    other 2023年8月6日
    00
合作推广
合作推广
分享本页
返回顶部