weixin_42749187 2021-04-02 16:58 采纳率: 50%
浏览 66

运行python生成的.bin文件大小为0kb怎么回事

from time import ctime
from socket import *
from ctypes import *
import struct

HOST = '10.91.12.107'
PORT = 5025
BUFSIZ = 8192
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
f = open("wave_3ph_50k.bin", "wb")
while True:
    dat = tcpCliSock.recv(BUFSIZ)
    f.write(dat)
print(tcpCliSock.close())

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-22 23:28
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:上面的代码段是一个简单的Python客户端程序,用于从服务器端接收数据并写入本地文件。请问这段代码中有哪些问题存在?并提出解决方法。
    1. 问题:while循环中没有退出条件,会一直接收数据导致程序陷入死循环。 解决方法:在while循环中加入退出条件,例如当接收到空数据时退出循环。
    2. 问题:错误处理不完善,没有处理数据接收失败的情况。 解决方法:在接收数据时做异常处理,处理数据接收失败的情况。
    3. 问题:打印tcpCliSock.close()的返回值并没有意义,因为close()函数不会返回任何值。 解决方法:移除print(tcpCliSock.close())这行代码,或者修改为print("Connection Closed")作为提示。
    4. 问题:缺少关闭文件和关闭套接字的操作,如果不及时关闭可能导致资源泄漏。 解决方法:在处理完数据后,使用f.close()关闭文件,使用tcpCliSock.close()关闭套接字。 示例代码:
    from time import ctime
    from socket import *
    from ctypes import *
    import struct
    HOST = '10.91.12.107'
    PORT = 5025
    BUFSIZ = 8192
    ADDR = (HOST, PORT)
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    f = open("wave_3ph_50k.bin", "wb")
    try:
        while True:
            dat = tcpCliSock.recv(BUFSIZ)
            if not dat:
                break
            f.write(dat)
    finally:
        f.close()
        tcpCliSock.close()
    

    在这个修改后的代码中,添加了异常处理、关闭文件和关闭套接字的操作,使程序更加规范和健壮。

    评论

报告相同问题?

悬赏问题

  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现