Python Socket TCP多线程通信【四】

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

Python Socket TCP多线程通信

一.创建客户端连接

一.开启多线程通信

  1. 前面说到,因为单线程原因,客户端与服务器无法做到自由对话,则需要用到多线程来处理。我们现在的服务端和客户端最多也就是发送消息和接收消息两种行为,所以我们采用双线程。
  2. 或许我们可以新建一个Client.py的客户端和Server.py的服务端,代码照搬第一期的。
  3. 首先编写客户端代码。导入内置的线程模块,随后调用模块内置函数threading.Thread( ),因为有两个行为(发送消息和接收消息)所以需要定义并启动双线程。
  • target:与目标函数对接使得目标函数开启一个线程。
  • args:向目标函数传入一个参数。这里两个线程同时将socket传入,可以使得socket获得两个线程的处理。
  • .start:启动线程。
import threading  # 导入线程模块
# 启动多线程(多个线程共用一个Socket)
threading.Thread(target=send_msg, args=(Client,)).start()
threading.Thread(target=recv_msg, args=(Client,)).start()

二.建立多线程任务

  1. 当多线程开启后,就可以写入发送消息和接收消息的行为了,我们称它为多线程要完成的任务,它会被写在自定义函数的循环语句内。
  2. while循环的作用不必多说:无条件,保持持续的通信(当然后期可以添加条件以跳出循环)
  3. 要注意的是,这两个函数在线程启动后会被同时运行,也就是说,在任何时候,不管是对方有没有发送消息,我们都可以直接向对方发送消息或者说接收消息,这就完美的解决了像单线程一对一的受限通信。起到自由对话的效果。
# 多线程任务
def send_msg(Client):     # 发送消息(任务线程)
    while True:
        send = input('>>>')
        Client.send(send.encode('utf-8'))


def recv_msg(Client):     # 接收消息(任务线程)
    while True:
        recvv = Client.recv(1024).decode('utf-8')
        print("服务器:" + f'{recvv}')
        

二.建立服务器连接

一.开启多线程通信

1.服务端也一样,直接套用第一期代码,重复和客户端一样的操作给它定义两个线程,但与前者不同的是,服务端的线程需要写在监听列队的内在循环语句内,这样每次有客户端连接服务器时,accept( )会创建一个新的socket并传给多线程任务。

# 循环接纳客户端
while True:
    socket, addr_info = Server.accept()  # 返回值传参赋值
    threading.Thread(target=send_msg, args=(socket,)).start()
    threading.Thread(target=recv_msg, args=(socket,)).start()
    print(f'{addr_info}' + "断开了与服务器的连接...")

二.建立多线程任务

  1. 和客户端一样,任务写在定义的双线程之上。
  2. if条件不写也没事。
# 多线程任务
def send_msg(socket):          # 发送消息(任务线程)
    while True:
        msg = input(">>>")
        socket.send(msg.encode('utf-8'))


def recv_msg(socket):          # 接收消息(任务线程)
    while True:
        remsg = socket.recv(1024).decode('utf-8')
        print("客户端:" + f'{remsg}')
        if len(remsg) == 0:
            break
            

三. 通信测试

一.通信效果

  1. 效果还不错的,可以进行自由通信。
    python socket 多线程,Python开发,Socket开发,python,tcp/ip,开发语言

四. 整体代码与总结

一.整体代码

  1. Client.py:
# 这是客户端
import socket
import threading

# 创建Socket TCP对象
Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定目标服务器端地址
Client_address = (('127.0.0.1', 2023))  # IP地址为需要连接服务器的IP
# 连接目标服务器
Client.connect(Client_address)
print('---------------------------客户端--------------------------')


# 多线程任务
def send_msg(Client):     # 发送消息(任务线程)
    while True:
        send = input('>>>')
        Client.send(send.encode('utf-8'))


def recv_msg(Client):     # 接收消息(任务线程)
    while True:
        recvv = Client.recv(1024).decode('utf-8')
        print("服务器:" + f'{recvv}')


# 启动多线程(多个线程共用一个Socket
threading.Thread(target=send_msg, args=(Client,)).start()
threading.Thread(target=recv_msg, args=(Client,)).start()

2.Server.py:文章来源地址https://www.toymoban.com/news/detail-763107.html

# 这是服务器端
import socket
import threading

# 创建Socket TCP对象
Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Server.bind(('', 2023))   # 绑定本地端口
print('---------------------------服务器端--------------------------')

# 启动监听列队
Server.listen(5)


# 多线程任务
def send_msg(socket):          # 发送消息(任务线程)
    while True:
        msg = input(">>>")
        socket.send(msg.encode('utf-8'))


def recv_msg(socket):          # 接收消息(任务线程)
    while True:
        remsg = socket.recv(1024).decode('utf-8')
        print("客户端:" + f'{remsg}')
        if len(remsg) == 0:
            break


# 循环接纳客户端
while True:
    socket, addr_info = Server.accept()  # 返回值传参赋值
    threading.Thread(target=send_msg, args=(socket,)).start()
    threading.Thread(target=recv_msg, args=(socket,)).start()
    print(f'{addr_info}' + "客户端与与服务器连接成功...")

二. 总结

  1. 本次应用到了Python的多线程模块,解决了Socket通信的局部问题。
  2. 本次的Python Socket TCP通信目前仅局限于局域网,还无法于外网进行通信,往后会进行补充。
  3. 说实话,我也才刚学到这里,真的是学一步做一个笔记,以免下次忘记。这个端午过的很充实呢!写了大半天的博客,让我深感体会到创作的不易,但收获却是满满当当的…
  4. 最后再这端午节最后的几小时内祝大家幸福安康!!!

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

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

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

相关文章

  • python实现TCP数据通讯,socket 客户端断开依然保持监听,多线程。

    服务端: 客户端: 服务端采用 try...except .. 形式,代码如下:

    2024年02月14日
    浏览(42)
  • python3套接字编程之socket和socketserver(TCP和UDP通信)

    socket和socketserver是python3中socket通信模块,关于其使用做如下总结。 目录 1.socket 1.1模块引入 1.2套接字获取 1.3套接字接口 1.3.1 服务端 1.3.2 客户端套接字函数 1.3.3 公共套接字函数 1.3.4 面向锁的套接字方法 1.3.5 面向文件的套接字的函数 2.socketserver 3.TCP 3.1 socket类型TCP 3.2 sockets

    2024年02月15日
    浏览(75)
  • c/c++开发,c++无可避免的TCP/Socket通信开发实战案例

    目录 一、案例项目设计概括 二,案例整体设计 三、TCP/Socket 的服务端与客户端通信代码设计         3.1 tcp/socket通信        3.2 客户端信息管理         3.3 数据的读取与写入 四、tcp/socket通信扩展        4.1 线程类及消息队列类设计         4.2 读取及写入数据

    2024年02月16日
    浏览(38)
  • Socket 传情:用 Python 编织 TCP 网络

    项目 描述 Python 官方文档 https://docs.python.org/zh-cn/3/ 搜索引擎 Google 、Bing 项目 描述 操作系统 Windows 10 专业版 PyCharm 2023.1 (Professional Edition) Python 3.10.6 服务器端 创建一个监听套接字对象,指定地址族( IPV4 或 IPV6 )和套接字类型( TCP 套接字 或 UDP 套接字 )。 通过使用 bind()

    2024年02月09日
    浏览(36)
  • socket实现tcp通信

    tcp的详细细节后面讲解,先来用它的一些接口实现1个简单的通信。下面来看它的一套接口 功能:socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符;应用程序可以像读写文件一样用read/write在网络上收发数据; 函数原型: 参数说明: domain:协议域又称

    2024年02月01日
    浏览(51)
  • 【python】TCP socket服务器 Demo

    目录 一、单线程服务器 二、多线程服务器 三、多线程服务器(发送和接收分离) 说明:只能连接一个客户端 客户端测试结果: 服务端测试结果:  说明:可以支持连接多个客户端 客户端测试结果:  服务端测试结果: 说明: 可以支持连接多个客户端,并且能够做到和多

    2024年02月09日
    浏览(38)
  • Python使用 Twisted 实现 TCP/UDP Socket 编程

    更多文章: 技数未来 环境准备: - 安装Python:确保你已经安装了Python解释器。 - 安装Twisted:可以通过pip命令来安装Twisted库,运行`pip install twisted`即可。 依赖的类库: - twisted.internet.protocol:包含了实现TCP/UDP Socket编程所需的协议类。 - twisted.internet.reactor:用于处理事件循环

    2024年02月16日
    浏览(49)
  • python tcp socket中实现SSL/TLS认证

    官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。 说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。如HTTP协议是明文传输,加上SSL层之后,就有了雅称 HTTPS 。它存在的唯一目的就是 保证上层

    2024年01月23日
    浏览(49)
  • 网络通信(Socket/TCP/UDP)

    Socket(又叫套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接协议,客户端的IP地址,客户端的端口,服务器的IP地址,服务器的端口。 一个Socket是一对IP地址和端口。 Socket可以看

    2024年01月22日
    浏览(55)
  • 1、Linux中的socket与TCP通信

    1、所谓 socket(套接字),就是 对网络中不同主机上的应用进程之间进行双向通信的端点的抽象 。 2、一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络

    2023年04月08日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包