客户端代码:

import socket
import threading
import time
import tracebackclass ElevClient(threading.Thread):def __init__(self, eClientId, host, port):threading.Thread.__init__(self, name="elevClient_" + eClientId)self.host = hostself.port = port  # config.ZLAN_SERVER_PORTself.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)def run(self):self.doConnect()while True:try:self.recv_msg()self.send_msg()except OSError:traceback.print_exc()time.sleep(2)print('socket connect error, doing connect in 2s .... host/port:{}/{}'.format(self.host, self.port))self.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.doConnect()except Exception as e:print('other error occur:{}'.format(e))traceback.print_exc()time.sleep(4)self.doConnect()def doConnect(self):while True:try:self.sck.connect((self.host, self.port))time.sleep(1)print('-----------------------------------------')print('client start connect to host/port:{}/{}'.format(self.host, self.port))print('-----------------------------------------')breakexcept ConnectionRefusedError:print('socket server refused or not started, reconnect to server in 3s .... host/port:{}/{}'.format(self.host, self.port))time.sleep(3)except Exception as e:traceback.print_exc()print('do connect error:{}'.format(str(e)))time.sleep(5)def send_msg(self):try:time.sleep(1)msg = str(time.time())self.sck.send(msg.encode())print('send msg:', msg)except Exception as e:print('send_msg:{}'.format(e))self.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.doConnect()def recv_msg(self):try:data = self.sck.recv(1024)if data:print('recv data:{}'.format(data))else:print('data is none')time.sleep(1)except Exception as e:print('recv_msg:{}'.format(e))self.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.doConnect()if __name__ == '__main__':elevClient = ElevClient('1', '127.0.0.1', 8787).start()pass

服务端代码:

import json
import logging
import traceback
from threading import Thread
import socket
import threading
import timelogger = loggingclass ElevStatusWsServer(Thread):def __init__(self, host, port):Thread.__init__(self, name="ElevStatusServer")self.host = hostself.port = portself.logger = loggerself.jsonTemplate = {"Command": "FORWARD_ELEV_INFO","DeviceId": "C0002T","ElevId": 1,}self.seqNo = 1self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)def run(self):self.doConnect()while True:try:client, addr = self.server.accept()# self.recv_msg(client, addr)threading.Thread(target=self.send_msg, args=(client, addr)).start()threading.Thread(target=self.recv_msg, args=(client, addr)).start()print(threading.enumerate())except socket.error:traceback.print_exc()print('socket connect error, doing connect 2s host/port:{}/{}'.format(self.host, self.port))time.sleep(2)except Exception as e:print('other error occur:{}'.format(e))time.sleep(2)def doConnect(self):while True:try:# 防止socket server重启后端口被占用(socket.error: [Errno 98] Address already in use)self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.server.bind((self.host, self.port))self.server.listen(5)print('-----------------------------------------------------------')print("esWsServer host:{}/port:{} started listen...".format(self.host, self.port))print('-----------------------------------------------------------')breakexcept Exception as e:time.sleep(1)print('start ws server error:{}'.format(str(e)))traceback.print_exc()def recv_msg(self, client, addr):try:# self.send_msg(client, addr)print('Accept new connection from {0}'.format(addr))while 1:data = client.recv(1024)msg = eval(data.decode("utf-8"))print('recv msg:', msg)except Exception as e:print('recv_msg:{}'.format(e))# client.close()def send_msg(self, client, addr):try:while 1:time.sleep(1)elevStatusDict = self.jsonTemplate.copy()msg2Elev = json.dumps(elevStatusDict).encode() + "\n".encode()client.sendto(msg2Elev, addr)print('send msg to client:{}:{}'.format(addr, msg2Elev))time.sleep(0.5)except Exception as e:print('send_msg:{}'.format(e))# client.close()if __name__ == '__main__':es = ElevStatusWsServer('127.0.0.1', 8787).start()

python-socket-服务端一对多客户端断线自动重连,自动收发消息示例相关推荐

  1. python 服务端与c++客户端通讯_[原创]python socket 服务端 与 c++客户端通讯,发包内容加密,支持大文件,并发...

    代码经过网络搜索,综合算是原创吧.py脚本为服务端 项目文件在 https://github.com/jinjie412/service_client_socket import socketserv ...

  2. Socket服务端向指定客户端发送消息

    Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...

  3. java 监听客户端的退出_Java socket 服务端如何监控客户端异常关闭?

    慕函数4003404 关闭是会抛出异常的,捕捉之后进行处理,退出循环 @Override public void run() { Boolean isExit = false; while (!isE ...

  4. PYNQ 采集计划(二)Socket服务端与客户端的搭建,pynq到pc的数据流传输

    文章目录 利用Socket搭建客户端和服务端 简易Socket收发 服务端的搭建 客户端的搭建 真正的视频socket收发 服务端 PC端客户端 进行测试 源码github地址 利用Socket搭建客 ...

  5. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  6. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  7. php socket(服务端与客户端)demo

    php socket(服务端与客户端)demo完整演示: 环境是:[phpstydy,PHP版本7.3.4nts],一定要开启[sockets]服务. 服务器[index.php](源码复制即可): ...

  8. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  9. Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView

    Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...

最新文章

  1. vscode快速注释_Python快速入门(一)
  2. 对英文文档中的单词与词组进行频率统计
  3. P1064 [NOIP2006 提高组] 金明的预算方案
  4. 高性能Web服务器Nginx使用指南
  5. UVa 10945 - Mother bear
  6. 5.7 拉普拉斯变换的性质
  7. 怎么将linux的动态IP设置成静态IP
  8. atitit 碎片化学习.docx attilax 总结
  9. Springboot中使用JWT
  10. 常见密码归纳(入门级)
  11. ps两张图片合在一起
  12. HTML入门学习线路图
  13. # 技术栈知识点巩固——Js
  14. Nvidia Xavier Nx平台PCIE速率调整调试记录
  15. Hypervisor介绍(二)
  16. 域服务器 文件服务器,域服务器文件服务器
  17. 最近爆火chatGTP是人工智能还是人工智障?
  18. python中怎么表示lnx_python数据分析进阶之numpy
  19. 设计模式之美-11| 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?
  20. 软考之信息安全工程师(包含2016-2018历年真题详解+官方指定教程+VIP视频教程)

热门文章

  1. echarts3 地图只显示南沙群岛
  2. 怎样做到音频合并无缝衔接
  3. java文本阅读器代码_java项目—文本阅读器
  4. ubuntu和Windows双系统安装
  5. DW CS5.5产品序列号
  6. 程超:突破瓶颈,思考如何不断的提高自己
  7. SpringBoot异步调用方法
  8. linux cp raf,Tim Blanks解读:Prada和Raf Simons的新CP缘何能引领新潮流
  9. Rust 语言服务器 (RLS)
  10. sa-sdk-javascript 神策页面加载的时候未进行埋点