【python】TCP socket服务器 Demo

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

目录

一、单线程服务器

二、多线程服务器

三、多线程服务器(发送和接收分离)


一、单线程服务器

说明:只能连接一个客户端

import socket,binascii

# 创建一个 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到指定的主机和端口
server_address = ('localhost', 6666)
server_socket.bind(server_address)

# 开始监听连接
server_socket.listen(5)  # 最多同时监听 5 个连接请求

print("等待客户端连接...")

while True:
    # 等待客户端连接
    client_socket, client_address = server_socket.accept()
    print(f"接受来自 {client_address} 的连接")

    # 接收客户端发送的数据
    while True:
        data = client_socket.recv(1024)  # 最多接收 1024 字节的数据
        data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串
        print(data_hex)

        # 向客户端回复响应数据
        sendData = "1A2B3C"
        client_socket.send(bytes.fromhex(sendData))
        if not data:
            break  # 如果没有数据,退出循环

    # 关闭与客户端的连接
    client_socket.close()
    break

# 关闭服务器套接字
server_socket.close()

客户端测试结果:

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket

服务端测试结果:

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket

二、多线程服务器

 说明:可以支持连接多个客户端

import socket,binascii,threading

def thread_HandleClient(client_socket):  # 用于处理与客户端连接后的逻辑
    while True:
        # 接收客户端发送的数据
        data = client_socket.recv(1024)
        data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串
        print(f"接收到来自 {client_socket.getpeername()} 的数据:{data_hex}")

        if not data:
            break  # 如果没有数据,退出循环

        # 向客户端发送响应数据
        sendData = "1A2B3C"
        client_socket.send(bytes.fromhex(sendData))
        # client_socket.sendall(bytes.fromhex(sendData))

    # 关闭与客户端的连接
    client_socket.close()

# 创建一个 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到指定的主机和端口
server_address = ('localhost', 6666)
server_socket.bind(server_address)

# 开始监听连接
server_socket.listen(5)  # 最多同时监听 5 个连接请求

print("等待客户端连接...")

while True:
    # 等待客户端连接
    client_socket, client_address = server_socket.accept()
    print(f"接受来自 {client_address} 的连接")

    # 创建一个新线程来处理客户端连接
    client_thread = threading.Thread(target=thread_HandleClient, args=(client_socket,))
    client_thread.start()

客户端测试结果: 

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket

服务端测试结果:

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket

三、多线程服务器(发送和接收分离)

说明: 可以支持连接多个客户端,并且能够做到和多个客户端发送、接收信息同时进行

import socket,threading,binascii,time


def receive_data(client_socket):
    while True:
        try:
            # 接收客户端发送的数据
            data = client_socket.recv(1024)
            data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串
            print(f"接收到来自 {client_socket.getpeername()} 的数据:{data_hex}")

            if not data:
                break  # 如果没有数据,退出循环

        except Exception as e:
            print(f"接收数据时出现错误:{e}")
            break

    # 关闭与客户端的连接
    client_socket.close()

def send_data(client_socket):
    while True:
        try:
            sendData = "1A2A3A"  # 要发送的数据
            client_socket.sendall(bytes.fromhex(sendData))  # 向客户端发送数据
            time.sleep(1)  # 1s发1条

        except Exception as e:
            print(f"发送数据时出现错误:{e}")
            break

if __name__ == '__main__':
    # 创建一个 TCP 套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定套接字到指定的主机和端口
    server_address = ('localhost', 6666)
    server_socket.bind(server_address)

    # 开始监听连接
    server_socket.listen(5)  # 最多同时监听 5 个连接请求

    print("等待客户端连接...")

    while True:
        # 等待客户端连接
        client_socket, client_address = server_socket.accept()
        print(f"接受来自 {client_address} 的连接")

        # 创建两个新线程分别处理接收和发送操作
        receive_thread = threading.Thread(target=receive_data, args=(client_socket,))
        send_thread = threading.Thread(target=send_data, args=(client_socket,))

        # 启动线程
        receive_thread.start()
        send_thread.start()

客户端测试结果: 

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket

服务端测试结果: 

【python】TCP socket服务器 Demo,python 后端,python,服务器,socket文章来源地址https://www.toymoban.com/news/detail-697677.html

到了这里,关于【python】TCP socket服务器 Demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于TCP/UDP的socket服务器搭建流程

    基于TCP/UDP的socket服务器搭建流程

    TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需 要建立连接 TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付 TCP面向字节流,实际上是TCP把数据看成一连串

    2023年04月08日
    浏览(11)
  • 【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

    【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

    目录 0. 准备知识 0.1 大小端概念 0.2 网络字节序和主机字节序的转换 0.3 点分十进制串转换(IP地址转换函数) 0.4 IPV4结构体:(man 7 ip) 0.5 IPV6套接字结构体:(man 7 ipv6) 0.6 通用套接字结构体 1. 网络套接字函数 1.1 socket 1.2 connect 1.3 bind 1.4 listen 1.5 accept 1.6 端口复用 2. 包裹函

    2024年02月07日
    浏览(18)
  • Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    socket(套接字),用于网络中不同主机间进程的通信。 socket是一个伪文件,包含读缓冲区、写缓冲区。 socket必须成对出现。 socket可以建立主机进程间的通信,但需要协议(IPV4、IPV6等)、port端口、IP地址。          (1)创建流式socket套接字。                 a)此s

    2024年02月11日
    浏览(20)
  • Socket网络编程(TCP/IP)实现服务器/客户端通信。

    Socket网络编程(TCP/IP)实现服务器/客户端通信。

    一.前言 回顾之前进程间通信(无名管道,有名管道,消息队列,共享内存,信号,信号量),都是在同一主机由内核来完成的通信。 那不同主机间该怎么通信呢? 可以使用Socket编程来实现。 Socket编程可以通过网络来实现实现不同主机之间的通讯。 二.Socket编程的网络模型如

    2024年02月08日
    浏览(19)
  • 简单的TCP网络程序·线程池(后端服务器)

    简单的TCP网络程序·线程池(后端服务器)

    目录 版本四:线程池 注意事项 文件:Task.hpp -- 任务单独为一个文件 组件:日志修改 新函数:vprintf() 可变参数的提取逻辑 vfprintf()的工作原理 初始化一个va_list 日志准备 获取时间小知识 日志初版 日志启动测试 TCP通用服务器(守护进程) * 新指令1:jobs -- 查看进程作业 新指令

    2024年02月09日
    浏览(15)
  • 简单的TCP网络程序·单进程(后端服务器)

    简单的TCP网络程序·单进程(后端服务器)

    目录 文件1:tcpServer.cc 文件2:tcpServer.hpp 1.提出日志概念 -- 在后续完善 日志格式 -- 暂定简单的打印功能 2.创建套接字 SOCK_STREAM -- socket参数 3.bind自己的套接字 4.设置socket 为监听状态 * 新接口1:listen 函数1:initServer() 新接口2:accept * 接口1:read 接口2:write 文件描述符本质是

    2024年02月11日
    浏览(12)
  • Linux中 socket编程中多进程/多线程TCP并发服务器模型

    一次只能处理一个客户端的请求,等这个客户端退出后,才能处理下一个客户端。 缺点:循环服务器所处理的客户端不能有耗时操作。 模型 源码 可以同时处理多个客户端请求 父进程 / 主线程专门用于负责连接,创建子进程 / 分支线程用来与客户端交互。 模型 源码 模型 源

    2024年02月12日
    浏览(14)
  • socket的使用 | TCP/IP协议下服务器与客户端之间传送数据

    socket的使用 | TCP/IP协议下服务器与客户端之间传送数据

    谨以此篇,记录TCP编程,方便日后查阅笔记 注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。 服务器端代码: 客户端代码: 运行后结果: 服务器端: 客户端: 参考资料: https://www.bilibili.com/vid

    2024年02月09日
    浏览(21)
  • 【Linux后端服务器开发】封装线程池实现TCP多线程通信

    目录 一、线程池模块 Thread.h LockGuard.h ThreadPool.h 二、任务模块模块 Task.h 三、日志模块 Log.h 四、守护进程模块 Deamon.h  五、TCP通信模块 Server.h Client.h server.cpp client.cpp 关于TCP通信协议的封装,此篇博客有详述: 【Linux后端服务器开发】TCP通信设计_命运on-9的博客-CSDN博客 线程池

    2024年02月16日
    浏览(12)
  • C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(一)

    C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(一)

    测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 2019 如下图所示,打开S7-PLCSIM ADVANCED V3.0仿真软件,新键一个实例,设置仿真PLC的IP地址等参数,然后点击Start激活PLC, 如下图所示,激活PLC后,可以看到已经存在一个实例, 如下图所示,打开TIA PORTAL V15.1,新建一个项目,

    2023年04月15日
    浏览(14)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包