当前位置: 首页 > news >正文

python tcp server client示例代码

功能: 实现基本的tcp server端、client端,并引入threading, 保证两端任意链接、断链接,保证两端的稳定运行

IP说明: server不输入IP,默认为本机的IP,client需要输入要链接的server端的IP

端口说明:server, client端保持一致

ADB调试说明:在连接数据线的情况下,PC安装ADB调试工具,android端打开ADB调试权限,输入adb forward tcp:12345 tcp:8888, 其中12345为PC端口, 8888为android端口。参数链接:adb forward 参考

server code:

from socket import *
import threading
import time
from typing import Optionalclass DataSend(threading.Thread):tcp_server = Optional[socket]def __init__(self, port):threading.Thread.__init__(self, name="data send")self.port = portdef run(self):# Creating the socket objectself.tcp_server = socket(AF_INET, SOCK_STREAM)# Binding to socketself.tcp_server.bind(('', self.port))  # Host will be replaced/substitued with IP, if changed and not running on host# Starting TCP listenerprint('begin listen')self.tcp_server.listen(3)print('end listen')while True:# Starting the connectionprint('begin accept')clientsocket, address = self.tcp_server.accept()print(address, 'accepted!')try:while True:msg_bits = clientsocket.recv(1024)print(msg_bits.decode('utf-8'))# Message sent to client after successful connectionmessage = 'hello! Thank you for connecting to the server' + "\r\n"clientsocket.send( message.encode('utf-8'))except ConnectionResetError:continueclientsocket.close()if __name__ == '__main__':data_send = DataSend(12345)data_send.start()while data_send.is_alive():time.sleep(1)

client code:

import threading
from socket import *
import time
from typing import Optionalclass DataRec(threading.Thread):tcp_client: Optional[socket]def __init__(self, ip, port):threading.Thread.__init__(self, name="data rec")self.ip = ipself.port = portself.tcp_client = Nonedef wait_tcp_connect(self):while self.tcp_client is None:time.sleep(1)self.tcp_client = socket(AF_INET, SOCK_STREAM)try:print('try to init client {}:{}'.format(self.ip, self.port))self.tcp_client.connect((self.ip, self.port))print('client inited!')except Exception as e:self.tcp_client = Noneprint("client init failed, waiting for server!")def run(self):self.wait_tcp_connect()msg_buffer = ''while True:try:time.sleep(1)self.tcp_client.send('hello from client'.encode('utf-8'))msg_bits = self.tcp_client.recv(1024*8)if not msg_bits:continuemsg_str = msg_bits.decode('utf-8')print("rec: {}".format(msg_str))except error as msg:print('client rec msg catch error({} - {})'.format(error, msg))self.tcp_client.close()self.tcp_client = Noneself.wait_tcp_connect()msg_buffer = ''# except Exception as e:#     print("client cat other error({})".format(e))if __name__ == '__main__':data_rec = DataRec('127.0.0.1', 12345)data_rec.start()while data_rec.is_alive():time.sleep(1)

http://www.lryc.cn/news/159645.html

相关文章:

  • typecho 反序列化漏洞复现
  • Python实现SSA智能麻雀搜索算法优化LightGBM分类模型(LGBMClassifier算法)项目实战
  • Java多线程4种拒绝策略
  • MySQL的MHA
  • Java实现链表
  • SpringCloud Alibaba(2021.0.1版本)微服务-OpenFeign以及相关组件使用(保姆级教程)
  • 豆制品废水处理设备源头厂家方案
  • lnmp环境搭建
  • 全球研发中心城市专题协商会课题调研组莅临麒麟信安考察指导
  • ZeroTier客户端连接服务器
  • NFT Insider#106:The Sandbox 与 Light Matrix 以及鲁比尼拳击场达成战略合作
  • 【猿灰灰赠书活动 - 04期】- 【分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践】
  • 前端element表格导出excel
  • React中的类组件和函数组件(详解)
  • 1987-2021年全国31省专利申请数和授权数
  • 欧洲云巨头OVHcloud收购边缘计算专家 gridscale
  • java从入门到起飞(八)——循环和递归
  • 架构师成长之路|Redis实现延迟队列的三种方式
  • 51单片机智能电风扇控制系统proteus仿真设计( 仿真+程序+原理图+报告+讲解视频)
  • 【设计模式】Head First 设计模式——工厂方法模式 C++实现
  • 【爬虫】7.2. JavaScript动态渲染界面爬取-Selenium实战
  • c语言实训心得3篇集合
  • 2023高教社杯数学建模B题思路代码 - 多波束测线问题
  • MySql 变量
  • 2023-简单点-make和build都是什么东西?
  • Nginx 学习(八)Nginx实现用IP测试灰度发布
  • QT 自定义信号
  • 注解方式配置SpringMVC
  • 2023年限售股解禁研究报告
  • 『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用