2301_77966027 2025-01-06 22:39 采纳率: 0%
浏览 28

c# 用networkstream发送和接收文件问题

客户端现在我用的一次发送,服务器用的判断接收,字节数能对上,但是就是文件是损坏的,用过分段发送,在每次发送都延迟1秒,也是字节数能对上,文件无法打开,麻烦各位帮忙看下我的代码,哪里错了,应该怎么做呢
客户端

img


服务器端

img

  • 写回答

4条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-06 22:40
    关注
    让【道友老李】来帮你解答,本回答参考通义千问大模型编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题分析: 根据描述,客户端发送文件时字节数能对上,但接收的文件却是损坏的。即使尝试了分段发送并加入延迟,问题仍未解决。下面就可能的问题进行分析和解决方案:
    1. 文件传输过程中可能存在丢包或者粘包导致文件损坏。
    2. 可能是文件接收端的处理逻辑有问题导致文件无法正常打开。
    3. 可能涉及网络传输的编码问题。 解决方案:
    4. 检查网络传输过程是否发生了丢包或者粘包现象,可以在客户端和服务器端打印日志进行查看。
    5. 对于文件接收端,可以检查是否对接收到的每个数据包都进行了处理,以及拼接的逻辑是否正确。
    6. 可以尝试更换文件传输的编码方式,比如使用base64编码来传输二进制文件。 代码示例:
    # 客户端发送文件代码示例
    import socket
    import time
    import base64
    def send_file(file_path, host, port):
        with open(file_path, "rb") as file:
            data = file.read()
        encoded_data = base64.b64encode(data)
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.connect((host, port))
            s.sendall(encoded_data)
    # 服务器端接收文件代码示例
    import socket
    import base64
    host = '127.0.0.1'
    port = 12345
    def receive_file(save_path):
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.bind((host, port))
            s.listen()
            conn, _ = s.accept()
            with conn:
                data = conn.recv(1024)
                decoded_data = base64.b64decode(data)
                
                with open(save_path, "wb") as file:
                    file.write(decoded_data)
                    
    # 使用示例
    send_file("example.txt", "127.0.0.1", 12345)
    receive_file("received_example.txt")
    

    通过以上代码示例和分析,您可以检查和修改相应部分来解决文件损坏的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月6日