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日

相关文章

  • Linux chroot命令用法详解

    Linux chroot命令用法详解 什么是chroot chroot是一种操作系统安全机制,它可以让一个进程以指定的目录作为”/”来运行。这个操作系统的根(/)被移动到了一个新的目录下。由于进程运行时自认为是在根目录下,因此在这个chroot环境下,进程只能访问到该目录下的文件和设备节点,而不能访问到其他的系统资源。 chroot的用途 为系统实现多用户的…

    other 2023年6月27日
    00
  • U盘文件夹变空文件夹的文件名乱码的修复方法

    针对“U盘文件夹变空文件夹的文件名乱码”的修复方法,我整理了以下完整攻略: 问题描述 使用U盘存储文件时,发现某些文件夹因为某些原因变成了空文件夹,并且文件夹的文件名变为乱码。这时候打开文件夹,里面没有任何文件,但是U盘的存储空间却不会反映出来。这种情况下如何修复这些文件夹? 解决方案 这种情况下,通常是因为U盘发生了错误而导致的。我们可以采用如下方法进行修…

    other 2023年6月26日
    00
  • React创建组件的三种方式及其区别

    React是一个基于组件和声明式编程的JavaScript库,创建React组件有三种方式。下面我将详细讲解这三种方式及其区别。 1. 函数组件 函数组件是最简单的创建组件的方法,它只需要定义一个返回React元素的函数,通常用于展示非交互式的UI组件。 以下是一个简单的函数组件的示例,它展示了一个简单的欢迎信息: function Welcome(prop…

    other 2023年6月27日
    00
  • 死亡空间重制版游戏模型不加载怎么办 模型不加载、卡顿解决方法

    死亡空间重制版游戏模型不加载怎么办 在玩死亡空间重制版时,有时会出现游戏模型不加载或卡顿的情况,这可能会影响游戏体验。以下是解决这些问题的方法: 模型不加载的解决方法 当游戏中的模型没有正常加载时,很可能是游戏文件出现了错误。这时可以尝试以下方法: 1. 检查游戏文件 在游戏的安装目录中找到 “Death Space.ini” 文件,将其中的 “USE RE…

    other 2023年6月27日
    00
  • C++实现动态数组功能

    下面是C++实现动态数组的完整攻略,包含以下几个步骤: 定义动态数组类 实现构造函数和析构函数 实现添加元素、删除元素和获取元素个数的方法 实现动态扩容功能 1. 定义动态数组类 我们可以使用C++的类来定义动态数组,代码如下: template<typename T> class DynamicArray { private: T *array…

    other 2023年6月25日
    00
  • Java类和成员变量声明类详解

    《Java类和成员变量声明类详解》 简介 本篇攻略主要详解Java中的类和成员变量声明,包括如何定义类、类的成员变量、访问修饰符以及类的实例化等。 声明类 在Java中,定义类需要使用class关键字,通常的类定义格式如下: 访问修饰符 class 类名 { // 成员变量 // 构造方法 // 成员方法 } 其中访问修饰符用于控制类的访问范围。Java中的…

    other 2023年6月27日
    00
  • imap协议命令(详细)

    以下是IMAP协议命令的完整攻略,包括两个示例说明。 1. IMAP协议命令简介 IMAP(Internet Mail Access Protocol)是一种用于电子邮件客户端访问邮件服务器的协议。IMAP协议命令是客户端与服务器之间进行通信的基本单位,客户端通过发送IMAP协议命令来请求服务器执行相应的操作,例如获取邮件列表、读取邮件内容、删除邮件等。 2…

    other 2023年5月9日
    00
  • torrent是什么文件?怎么打开?

    Torrent是什么文件?怎么打开? Torrent是一种用于下载和共享文件的协议和文件类型。它允许用户通过将文件分成小块并从多个来源下载这些块来实现高速下载。Torrent文件本身是一个包含元数据的小文件,其中包含了指向实际文件的链接、文件大小、文件名和其他相关信息。 要打开Torrent文件并开始下载文件,您需要遵循以下步骤: 选择Torrent客户端软…

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