c# - 文件传输套接字编程

标签 c# .net

<分区>

我使用 C# 制作了一个文件传输程序。我已经编写了服务器和客户端程序。现在我想做一些额外的事情。我想发送用户的卷号(例如:1、2、3 等)以及来自客户端程序的 IP 地址,这将在服务器端接收。我将如何做?我的示例客户端程序代码如下:

class Program
{
    static void Main(string[] args)
    {
        try
        {    
            string roll ="1";
            string fileName = @"D:\demo.txt";
            TcpClient tcpClient = new TcpClient("127.0.0.1", 1234);
            Console.WriteLine("Connected. Sending file.");
            StreamWriter sWriter = new StreamWriter(tcpClient.GetStream());                
            byte[] bytes = File.ReadAllBytes(fileName);
            sWriter.WriteLine(bytes.Length.ToString());
            sWriter.Flush();
            sWriter.WriteLine(fileName);
            sWriter.Flush();
            Console.WriteLine("Sending file");
            tcpClient.Client.SendFile(fileName);
        }
        catch (Exception e)
        {
            Console.Write(e.Message);
        }

        Console.Read();
    }
}

我还需要添加哪些内容?

最佳答案

作为OSI Model建议,TCP 只负责transport/session 层面的通讯,以实现你的client 之间的完整通讯 和您的服务器,您需要通过TCP 通信定义您自己的应用协议(protocol)

为此你需要一些东西:

  • Presentation Layer它将负责数据的序列化/反序列化加密/解密 -
    • 为此,您可以使用 BinaryFormatter 或编写您自己的序列化程序,您可以序列化为二进制数据、XML、JSON 或您希望的任何其他格式,但您应该希望让序列化程序处理这个,而不是像您刚才那样在您的应用程序代码中执行此操作
  • Application Layer 将负责数据的对象表示,并允许您在不更改通信层的情况下抽象地更改数据(通过实现匹配的 objects)
    • 为文件表示创建一个类,其中将包含:
      • 文件名。
      • 文件数据。
      • 卷号。
      • 您需要的任何其他应用数据。

这样您就可以在需要时创建新的消息类型,而无需更改整个模型和设计(例如,重置滚动消息等...)。

关于c# - 文件传输套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781257/

相关文章:

.net - SDK更新后U-SQL脚本无法编译

c# - C# 中的 UDP 代理?需要一点帮助

c# - 如何区分 BackgroundWorker.RunWorkerCompleted 事件处理程序中的不同异常类型

.net - 在 .NET 中使用 C++ 类

c# - 一种接受不同参数的方法

c# - 使用 RX 组成命令总线

c# - 在 OpenXML (PresentationML) PowerPoint (PPTX) 中计算文本 (TextBody) 的大小(范围)

c# - 如何在富文本框的文本字符串中添加 rtf 格式?

c# - 具有一组字符而不是一个字符的序列对齐算法

.net - 如何在 Asp.Net Web api 中返回深度序列化对象(具有复杂类型属性)?