python socket能做什么_python socket使用

本文分享了作者自学 Python Socket 编程过程中遇到的问题及解决方案,包括眼高手低导致的编写困难、错误处理不当、代码理解偏差等,并通过具体实例进行深入剖析。

自学python,先在菜鸟教程网自学,然后买了本书看。又从同事那里淘到了某个培训学校python教学视频,查缺补漏。视频是用python3.0讲的,讲解的很不错,中间有让写作业,这个我很喜欢。这几天看的是socket。书中和网站上讲的很笼统,教学视频写了一个用例,讲解的很不错,然后自己就写了几遍,发现很多问题,总结一下。

先说下我的问题。

问题一:

第一次写的时候,知道步骤,但就是写不出来。

总结:在看视频的时候,觉得很简单,会了,就没自己写一遍,直到自己写的时候才发发现自己不会,典型的眼高手低。

问题二:

然后就是对着菜鸟教程的例子,写了一遍,报错,看了下报错日志,我首先想的不是我为什么错了,而是赶紧对照人家网站例子,看是不是我哪里写不一样,从来没有怀疑过是网站的代码本身有问题,后来证明确实是网站代码有问题,是没有encode造成的。

总结:错了就看日志报错的原因,顺着原因去解决,很轻松,权威有时候也会打盹啊。

问题三:

然后写视频中的例子,这个还是有点难度的,写第一遍的时候,感觉乱七八糟的。一开始写的时候,还很顺利,结果后面问题不断,然后问题多的就写不下去了,就对着例子写。成功后就删了重写第二遍,清晰了很多。过了一周,我写第三遍,我把我当成讲师,在讲解这个例子。然后问题来了。我客户端发送查询命令,服务端返回数据,结果是第一次什么也不返回,第二次输出第一次的数据。我在服务端各种打输出,确定服务端没问题,那问题就出在客户端了。细看了一遍,也没问题啊。然后对比客户端与服务端接受发送条令,发现服务端有两个输出,而客户端只有一个接受数据指令。客户端第一个接收指令接受的是长度,第二个接受的是数据。一开始我以为客户端的接收指令接收的就是数据,其实是长度,只是我当时脑子轴了,以为那个长度就是数据,一直找了一两个小时才发现。当时真想给自己两巴掌。注意一下,这里的两个接收指令不能写反,是与服务端按顺序接收数据的。

总结:把别人的例子,自己吃透了,才是自己,纯粹的抄写是不行,只有自己融会贯通才行。

问题四:客户端close(),在pycharm,提示:This inspection detects code which can not be normally reached,即:此行代码运行的时候无法达到。后来经过研究,发现是因为While True 这个循环没有结束,只要进行判断,进行一个break就行了。

先上图一张,网上搜的,讲解的很明确,所以粘贴上来,让大家看看

代码部分:

server端:

import socket,os

server= socket.socket()

# host = socket.gethostname()

# client.connect(('localhost',9999))

server.bind(('localhost',9999))

server.listen(2)

while True:

print('等待客户端连接。。。。')

recip,addr= server.accept()

while True:

print('\033[1;34;0m地址是\033[0m',addr)

data= recip.recv(1024)

if not data:

print('\033[1;38;0m客户端 has lost...\033[0m')

break

msg_res= os.popen(data.decode('utf-8')).read()

print('\033[1;32;0m发送到客户端的内容为:\n\033[0m',msg_res)

recip.send(str(len(msg_res)).encode())

recip.send(msg_res.encode())

print('\033[1;33;0m发送到客户端的内容为:\n\033[0m', msg_res.encode())

print('\033[1;35;0m发送数据的长度:\033[0m',len(msg_res))

server.close()

print('server 运行结束!')client端:

from socket import *

import asyncio

client_socket = socket()

host = gethostname()

client_socket.connect(('localhost',9998))

while True:

cmd = input('输入你要查询的内容:').strip()

client_socket.send(cmd.encode("utf-8"))

if len(cmd) == 0:continue

#接受数据的顺序不能写反

data_len = client_socket.recv(1024)

receive_size_len = int(data_len.decode())

# client_socket.send('200 ok'.encode())

receive_data = b''

receive_len = 0

#方法一

while receive_len < receive_size_len:

#这里加if判断语句的话,在客户端可以取消注释的一行:client_socket.send('200 ok'.encode())

if receive_size_len - receive_len > 1024:

size = 1024

else:

size = receive_size_len - receive_len

data = client_socket.recv(size)

receive_len += len(data.decode())

receive_data += data

print('\033[1;35;01m输出数据为:\n\033[0m',receive_data.decode())

else:

print("\033[1;36;01mcmd res receive done...\033[0m")

break

client_socket.close()

print('\033[1;33;0mclient has over \033[0m'

内容概要:本文详细介绍了一个基于Python实现的锂电池剩余寿命(RUL)预测项目,采用Transformer-LSTM混合深度学习模型,结合GUI界面实现智能化预测与可视化分析。项目涵盖从数据生成、特征工程、模型构建(Transformer自注意力机制与LSTM时序建模融合)、训练优化、性能评估到实际部署的全流程。通过滑动窗口采样、数据归一化、多维度评估指标(MSE、MAE、R²、RMSE、MAPE)及残差分析,确保模型高精度与鲁棒性。同时集成注意力权重与LSTM隐状态可视化功能,提升模型可解释性,并设计了完整的GUI交互系统,支持数据加载、模型热插拔推理与预测结果动态展示。; 适合人群:具备一定Python编程基础和深度学习知识,熟悉PyTorch框架的数据科学从业者、研究生及从新能源、智能制造、电池管理系统开发的工程师。; 使用场景及目标:①应用于新能源汽车、储能电站、消费电子等领域的电池健康管理;②实现锂电池剩余寿命的高精度动态预测,支持智能运维与故障预警;③为科研人员提供可复现、可扩展的深度学习时序建模实例,推动电池寿命预测技术的工程化落地。; 阅读建议:建议读者结合代码与文档逐步实践,重点关注数据预处理、模型结构设计与GUI集成部分,尝试在本地环境中运行并调试程序,深入理解Transformer与LSTM协同工作机制,同时可扩展多模态输入或轻量化部署以适应更多应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值