编程语言
首页 > 编程语言> > c#-使用套接字传输文件

c#-使用套接字传输文件

作者:互联网

我需要根据其IP地址和特定端口将所有类型的文件传输给特定用户.因此,每当新请求到达指定端口(服务器正在等待文件的端口)时,即表示文件已传输它在另一个端口中传输了一些聊天消息.

我的问题是我需要具有发送文件的名称和大小以及其内容,以便在客户端创建与发送文件相同名称的新下载文件.我该如何处理.我还需要知道文件的大小,以便我可以创建一个字节数组来接收内容.我的代码在这里.请帮帮我

   public void fileClient()
        {
            TcpClient client = new TcpClient();
            client.Connect(IPAddress.Parse("127.0.0.1"), 40399);
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.ShowDialog();
            string fileName = dlg.FileName;
            FileInfo fi = new FileInfo(fileName);
            string fileNameandSize = fi.Name + "." + fi.Length;
            byte[] fileContents = File.ReadAllBytes(fileName);
                       Stream stream = client.GetStream();
              stream.SetLength(fi.Length);//If i set the file length here am getting an exception
                       stream.Write(fileContents, 0, fileContents.Length); 
            client.Close();
        }

public void fileServer()
    {
        TcpListener list;
        Int32 port1 = 40399;
        list = new TcpListener(port1);
        list.Start();
        TcpClient client = list.AcceptTcpClient();
        MessageBox.Show("Client trying to connect");
        Thread.Sleep(10);
            Stream stream = client.GetStream();
        byte[] receivedBytes = new byte[stream.Length];
        stream.Read(receivedBytes, 0, Convert.ToInt16(stream.Length));  
                   string fileName = "C:\\Users\\dhivya.s\\Desktop\\Recent received";
                    File.WriteAllBytes(fileName + "\\" + "newFile", receivedBytes);
        list.Stop();
        client.Close();
    }

解决方法:

像这样的文件传输依赖于两端之间是否有约定的协议.例如,您可以定义一个简单的协议,其中前四个字节指定文件名的大小,后四个字节指定文件的大小.然后发送文件名,然后发送内容.然后,您只需要担心电线的两端使用大端还是小端.如果它们相同,那就很好.

这就是为什么套接字不是通信的好选择的原因.现有许多用于传输文件的协议(HTTP,FTP,AMF等),这些协议已经可以为您处理这些事情.那么,为什么不使用其中之一呢?

标签:sockets,file-transfer,wpf,c
来源: https://codeday.me/bug/20191122/2060705.html