Передача файлов по сети - C#
Формулировка задачи:
День добрый) Вообщем пишу клиент-серверную оболочку для управления мат. моделированием.
Пока решаю проблему передачи данных от клиента к серверу. Передавать один файл у меня получается(переданный файл записывается сервером в Data.txt), но их нужно передать несколько(чтобы остальные полученные файлы сервер записывал в Data1.txt, Data2.txt, Data3.txt и тд) Подскажите, как это реализовать? Точнее, я понимаю, что это скорее всего нужно реализовывать с помощью цикла, но так как программист я не очень, то не имею ни малейшего понятия как это сделать) Поэтому лучше покажите)) В любом случае, буду благодарен любой помощи.
Вот код сервера:
Код клиента:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace ConsoleApplicationServer { class Program { static void Main(string[] args) { IPHostEntry ipHost = Dns.Resolve("localhost"); IPAddress ipAdr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAdr, 11000); Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { sListener.Bind(ipEndPoint); sListener.Listen(10); while (true) { Console.WriteLine("Ожидание подключения на порту {0}", ipEndPoint); Socket handler = sListener.Accept(); string data = null; while (true) { byte[] bytes = new byte[1024]; int byteRes = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, byteRes); break; } Console.WriteLine("Данные получены: {0}", data); string TheReply = "Данные приняты"; byte[] msg = Encoding.ASCII.GetBytes(TheReply); Directory.CreateDirectory(@"E:\\Project1"); FileStream fileS = new FileStream(@"E:\\Project1\Data.txt", FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fileS); StringBuilder sb; sb = new StringBuilder(); sb.Append(data); sw.Write(sb.ToString()); sw.Close(); handler.Send(msg); handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; namespace WFClient { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); textBox2.Text = openFileDialog1.FileName; FileStream fs = new FileStream(textBox2.Text,FileMode.Open, FileAccess.Read); byte[] readBuf = new byte[fs.Length]; fs.Read(readBuf,0,(Convert.ToInt32(fs.Length))); textBox3.Text = Encoding.ASCII.GetString(readBuf); } private void button2_Click(object sender, EventArgs e) { byte[] bytes = new byte[1024]; try { IPHostEntry ipHost = Dns.GetHostEntry("127.0.0.1"); IPAddress ipAdr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAdr, 11000); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ipEndPoint); FileStream fs = new FileStream(textBox2.Text, FileMode.Open, FileAccess.Read); byte[] readBuf = new byte[fs.Length]; fs.Read(readBuf, 0, (Convert.ToInt32(fs.Length))); int bytesSend = socket.Send(readBuf); int bytesRec = socket.Receive(bytes); textBox1.Text = ("Подключен к " + socket.RemoteEndPoint.ToString() + "\r\nОт сервера получено: " + Encoding.ASCII.GetString(bytes, 0, bytesRec)); socket.Shutdown(SocketShutdown.Both); socket.Close(); } catch (Exception ex) { textBox1.Text = ("Ошибка: " + ex.ToString()); } } } }
Решение задачи: «Передача файлов по сети»
textual
Листинг программы
byte[] bytes = new byte[1024]; int byteRes = socket.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, byteRes); if (byteRes < 1024) { string TheReply = "Data recieved"; byte[] msg = Encoding.ASCII.GetBytes(TheReply); Directory.CreateDirectory(@"E:\\Project1"); FileStream fileS = new FileStream(@"E:\\Project1\start.txt", FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fileS); StringBuilder sb; sb = new StringBuilder(); sb.Append(data); sw.Write(sb.ToString()); sw.Close(); handler.Send(msg); handler.Shutdown(SocketShutdown.Both); handler.Close(); break;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д