Как отправить файл с одного компьютера на другой с помощью C#
я пишу код для передачи одного файла с одного компьютера на другой компьютер, в моем случае я могу передавать файловый клиент и сервер в одной системе,но я не могу сделать это между двумя разными системами.
Пожалуйста, помогите мне решить эту проблему,
Заранее спасибо.
Что я уже пробовал:
Сервер:
private void Form1_Load(object sender, EventArgs e) { //IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName()); //lbl_Status.Text = "My IP address is " + IPHost.AddressList[0].ToString(); nSockets = new ArrayList(); Thread thdListener = new Thread(new ThreadStart(ListenerThread)); thdListener.Start(); } public void ListenerThread() { TcpListener tcpListener = new TcpListener(IPAddress.Parse(GetIp()),8080); tcpListener.Start(); while (true) { Socket handlerSocket = tcpListener.AcceptSocket(); //TcpClient client = tcpListener.AcceptTcpClient(); //MessageBox.Show(client.Client.RemoteEndPoint + "."); if (handlerSocket.Connected) { lb_Connections.Invoke((MethodInvoker)delegate { //btn_SaveFile.PerformClick(); saveFileDialog_Server.ShowDialog(); txt_SaveFile_Location.Text = saveFileDialog_Server.FileName; lb_Connections.Items.Add(handlerSocket.RemoteEndPoint.ToString() + " connected."); }); lock (this) { nSockets.Add(handlerSocket); } ThreadStart thdstHandler = new ThreadStart(handlerThread); Thread thdHandler = new Thread(thdstHandler); thdHandler.Start(); } } } public void handlerThread() { Socket handlerSocket = (Socket)nSockets[nSockets.Count - 1]; NetworkStream networkStream = new NetworkStream(handlerSocket); int thisRead = 0; int blockSize = 1024; Byte[] dataByte = new Byte[blockSize]; lock (this) { // Only one process can access // the same file at any given time Stream fileStream = File.OpenWrite(txt_SaveFile_Location.Text); while (true) { thisRead = networkStream.Read(dataByte, 0, blockSize); fileStream.Write(dataByte, 0, thisRead); if (thisRead == 0) break; } fileStream.Close(); } lb_Connections.Invoke((MethodInvoker)delegate { lb_Connections.Items.Add("File Written"); }); handlerSocket = null; } public string GetIp() { string name = Dns.GetHostName(); IPHostEntry entry = Dns.GetHostEntry(name); IPAddress[] addr = entry.AddressList; if (addr[1].ToString().Split('.').Length == 4) { return addr[1].ToString(); } return addr[2].ToString(); }
Клиент:
private void button1_Click(object sender, EventArgs e) { DialogResult dialogResult =folderBrowserDialog_openFiles.ShowDialog(); txt_OpenFiles.Text = folderBrowserDialog_openFiles.SelectedPath; filepath = txt_OpenFiles.Text; } private void button2_Click(object sender, EventArgs e) { try { saveFileDialog_zip.Filter = @"Zip Files (.zip) | *.zip | All Files(*.*) | *.*"; DialogResult dr = saveFileDialog_zip.ShowDialog(); saveFile = saveFileDialog_zip.FileName; fileName = saveFile; ZipFile.CreateFromDirectory(filepath, fileName); MessageBox.Show("Zip File Created at your Saved Location"); } catch (Exception exception) { MessageBox.Show("Zip file not created"); } } private void btn_Browse_Zip_Click(object sender, EventArgs e) { DialogResult drbrowse_zip=openFileDialog_OpenZip.ShowDialog(); openFileDialog_OpenZip.Filter = "Zip Files (.zip) | *.zip | All Files(*.*) | *.*"; openFileDialog_OpenZip.FilterIndex = 1; if (drbrowse_zip == System.Windows.Forms.DialogResult.OK) { txt_BrowseZip.Text = openFileDialog_OpenZip.FileName; } } private void btn_Transfer_Click(object sender, EventArgs e) { Stream fileStream = File.OpenRead(txt_BrowseZip.Text); // Alocate memory space for the file byte[] fileBuffer = new byte[fileStream.Length]; fileStream.Read(fileBuffer, 0, (int)fileStream.Length); // Open a TCP/IP Connection and send the data TcpClient clientSocket=new TcpClient(txt_Server.Text,8080); NetworkStream networkStream = clientSocket.GetStream(); networkStream.Write(fileBuffer, 0, fileBuffer.GetLength(0)); networkStream.Close(); }
Garth J Lancaster
но я не в состоянии сделать это между двумя разными системами.
что это значит ? что же происходит ? в чем же ошибка ? где код останавливается/терпит неудачу ? есть ли связь между машинами 1 и 2 ? они в одной сети ? можете ли вы пинговать от "клиента" до "сервера"?
мы не можем видеть ваш экран - вам лучше научиться использовать отладчик - как только у вас будет немного больше информации, пожалуйста, обновите свой вопрос с помощью виджета "улучшить вопрос".
Richard MacCutchan
Вам понадобится сервер, чтобы передать его в другую систему.
Member 12528561
я также написал код для сервера, у меня есть сомнения в том, что мой код работает для передачи файла из одной системы в другую.