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

这篇具有很好参考价值的文章主要介绍了python实现TCP数据通讯,socket 客户端断开依然保持监听,多线程。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. TCP数据通讯

服务端:

import socket

host = '192.168.33.1'  # 服务端IP地址
prot = 8080     # 设置端口号(可任意)

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建套接字
server_socket.bind((host, prot))     # 将地址(主机名、端口号)绑定到套接字上
server_socket.listen(5)      # 设置并启动TCP监听器,参数5是在连接被转接或拒绝之前,传入连接请求的最大数连接队列最大值。
print("等待客户端连接...")

client_socket, address = server_socket.accept()     # 被动接受TCP客户端连接,持续等待直到连接到达(阻塞等待)。
print("连接来自: %s:%s" % address)      # 显示请求连接的客户端的地址

while True:
    data = client_socket.recv(1024)     # 接受客户端发来的数据
    if not data:
        print("客户端%s:%s断开连接" % address)
        break
    print("接收到来自%s:%s的消息:" % address)
    print(data.decode('utf-8'))
server_socket.close()     # 退出服务器端

客户端:文章来源地址https://www.toymoban.com/news/detail-623188.html

import socket
import time

host = '192.168.33.1'  # 服务端IP地址
prot = 8080     # 服务端端口号
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建套接字
# client_socket.bind((host, 9990))    # 客户端配置自己从哪一个端口访问服务端,9990可任意
client_socket.connect((host, prot))   # 客户端向服务端发起连接
data = client_socket.recv(1024)    # 接受数据
print(data.decode(('utf-8')))   #显示数据

while True :
    client_socket.send(b'Connection successful.')  # 发送消息
    time.sleep(2)   # 等待2秒

client_socket.close()     # 退出客户器端

2. socket 客户端断开,服务端依然保持监听

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

import socket

host = '192.168.33.1'  # 服务端IP地址
prot = 8080     # 设置端口号(可任意)

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建套接字
server_socket.bind((host, prot))     # 将地址(主机名、端口号)绑定到套接字上
server_socket.listen(5)      # 设置并启动TCP监听器,参数5是在连接被转接或拒绝之前,传入连接请求的最大数连接队列最大值。
print("等待客户端连接...")

while True:
    try:
        client_socket, address = server_socket.accept()     # 被动接受TCP客户端连接,持续等待直到连接到达(阻塞等待)。
        print("连接来自: %s:%s" % address)      # 显示请求连接的客户端的地址
        while True:
            data = client_socket.recv(1024)     # 接受客户端发来的数据
            if not data:
                print("客户端%s:%s断开连接" % address)
                break
            print("接收到来自%s:%s的消息:" % address)
            print(data.decode('utf-8'))
    except ConnectionResetError:
        print("客户端 %s:%s异常断开连接" % address)
        continue
    except KeyboardInterrupt:
        print("服务器关闭")
        break

server_socket.close()     # 退出服务器端

3. 用threading 模块Thread 类,加入多线程,修改服务端如下:

import socket
import threading
import time

host = '192.168.33.1' 
prot = 8080    

def tcplink():
    num = 1
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server_socket.bind((host, prot))   
    server_socket.listen(5)     
    print("等待客户端连接...")
    while True:
        try:
            client_socket, address = server_socket.accept()     
            print("连接来自: %s:%s" % address)   
            client_socket.send(b'welcome') 
            time.sleep(2)   
            while True:
                data = client_socket.recv(1024)    
                if not data:
                    print("客户端%s:%s断开连接" % address)
                    break
                # client_socket.send(data)
                print("接收到来自%s:%s的消息:" % address)
                print(data.decode('utf-8'))
        except ConnectionResetError:
            print("客户端 %s:%s异常断开连接" % address)
            continue
        except KeyboardInterrupt:
            print("服务器关闭")
            break
    server_socket.close()    
    print("客户端%s:%s断开连接" % address)


if __name__ == '__main__':
    t = threading.Thread(target=tcplink)
    t.start()

4. 一个服务端配备多个客户端,修改服务端如下:

import socket
import threading
import time

host = '192.168.33.1' 
prot = 8080    

def tcplink_recv(client_socket,address):
    while True:
        try:
            data = client_socket.recv(1024)    
            if not data:
                print("客户端%s:%s断开连接" % address)
                break
            # client_socket.send(data)
            print("接收到来自%s:%s的消息:" % address)
            print(data.decode('utf-8'))
        except :
            print("客户端 %s:%s异常断开连接" % address)
            break

def tcplink():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server_socket.bind((host, prot))   
    server_socket.listen(5)     
    print("等待客户端连接...")
    while True:
        try:
            client_socket, address = server_socket.accept()     
            print("连接来自: %s:%s" % address)   
            client_socket.send(b'welcome')    
            t = threading.Thread(target=tcplink_recv,args=(client_socket, address))
            t.start()
            time.sleep(2)
        except ConnectionResetError:
            print("客户端 %s:%s异常断开连接" % address)
            continue
        except KeyboardInterrupt:
            print("服务器关闭")
            break
    server_socket.close()    
    print("客户端%s:%s断开连接" % address)


if __name__ == '__main__':
    t = threading.Thread(target=tcplink)
    t.start()

5. 客户端发送数组或者字典时,需要对数据转码,采用json模块,修改客户端代码如下:

import socket
import time
import json 

host = '192.168.33.1'  # 服务端IP地址
prot = 8080     # 服务端端口号
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# client_socket.bind((host, 9990))    
client_socket.connect((host, prot))  
data = client_socket.recv(1024)  
print(data.decode(('utf-8'))) 

list = [1,1,1]
# list = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

while True :
    list_json = json.dumps(list)   # 转码
    client_socket.send(bytes(list_json.encode('utf-8')))  # socket发送的数据类型是字节
    time.sleep(2)   
    
client_socket.close()    

到了这里,关于python实现TCP数据通讯,socket 客户端断开依然保持监听,多线程。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【(数据结构)—— 基于单链表实现通讯录】

    (1). 知识要求 C语言基础要求:结构体、动态内存管理、单链表、文件件操作 (2). 功能要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系

    2024年02月08日
    浏览(41)
  • 数据结构——基于顺序表实现通讯录

    1)⾄少能够存储100个⼈的通讯信息 2)能够保存⽤⼾信息:名字、性别、年龄、电话、地址等 3)增加联系⼈信息 4)删除指定联系⼈ 5)查找制定联系⼈ 6)修改指定联系⼈ 7)显⽰联系⼈信息 我们之前创建的顺序表可以实现连续存储数据(类型可以为整型、字符等),但无

    2024年02月05日
    浏览(39)
  • python数据结构实验设计(单链表):通讯录管理

    目录 摘要 一、课程设计目的及内容 创新功能: 二、算法及设计过程分析 1.总流程 2.主界面 3.文件处理与生成单链表 4.查看所有联系人信息 5.查看人数 6.查找联系人(以姓名或号码为依据) 7.对姓名或号码输入进行模糊查找  8.添加联系人 9.删除联系人  10.合并两个通

    2024年01月16日
    浏览(35)
  • 数据结构——基于单链表实现通讯管理系统

    这个通讯录是基于单链表实现的,关于单链表,之前已经做过完整的实现方法——数据结构——单链表(C语言版) 用单链表实现的通讯录其实和用顺序表实现的通讯录类似,可以参考该文章——基于动态顺序表的应用——通讯录 完成该通讯录需要引进经过修改后的单链表的

    2024年04月14日
    浏览(58)
  • 利用51单片机实现与RS485通讯,接收数据

    目录 一、研究背景 二、硬件准备 三、软件准备  四、实验原理 五、单片机代码  六、Python读取串口处理数据 七、开发总结          学院给了14天的时间,一枚专业课紧的大三狗匆忙做出来。探索出一种研究阳极氧化工艺电解液中金属离子浓度在线测量和监控的设备和方式

    2024年02月07日
    浏览(43)
  • 【(数据结构) —— 顺序表的应用-通讯录的实现】

    C语言基础要求:结构体、动态内存管理、顺序表、文件件操作 (1). 功能要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系人信息 (2).重

    2024年02月08日
    浏览(45)
  • Python物联网开发-Python_Socket通信开发-Python与Tcp协议物联网设备通信-Socket客户端

            Python在物联网开发中的重要愈来愈重,因此,掌握Python语言与物联网设备之间的通信就显得尤为重要,可以通过编写Python程序实现获取物联网设备的传感器数值并可以更改物联网设备上的执行器状态。         首先,当使用Python进行Socket通信时,需要导入Python的so

    2024年02月17日
    浏览(67)
  • 数据结构课设—C语言实现通讯录管理系统(顺序表实现)

    这个项目是我大一时期数据结构的课程设计,在我潜心研究下出来的,对于当时的我来说算是非常满意啦,哈哈哈哈哈哈哈哈哈哈☆*: .。. o(≧▽≦)o .。.:*☆ 目录 一、引言 1.目的: 2.意义: 3.主要任务: 4.程序功能: 5.编译工具: 二、正文 1.系统模块: 2.算法流程图: 3.各

    2024年02月02日
    浏览(73)
  • 【2023】JAVA和PLC实现通讯读取写入数据,以三菱PLC举例

    进行PLC连接需要了解两个概念: 长连接和短连接 。为了更好的说明当前的通信情况,我把所有的通信拆分为四个部分,连接,发,收,断开。 短连接:连接,发,收,断开,连接,发,收,断开,连接,发,收,断开,连接,发,收,断开…无限循环 长连接:连接,发,收

    2024年02月12日
    浏览(39)
  • 【STM32通讯系列--串口通讯】使用标准库、HAL库实现任意长度数据的收发(包含帧头、帧尾校验,配套完整开源程序)

    【数据组成】串口的通讯协议由开始位,数据位,校验位,结束位构成。 【数据结构】一般以一个低电平作为一帧数据的起始,接着跟随 8 位或者 9 位数据位,之后为校验位,分为奇校验,偶校验和无校验,最后以一个先高后低的脉冲表示结束位,长度可以设置为 0.5,1,

    2024年02月14日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包