Я пытаюсь создать программу «Сервер \ Клиент», которая позволяет одновременно передавать несколько файлов между моим ноутбуком и домашним компьютером.
Моя программа прекрасно работает, когда отправляете один файл; однако, когда я пытаюсь отправить несколько файлов одновременно в разных потоках, это не работает (я не получаю никакого файла на сервере)
вот что я сделал
foreach (string file in FilesCollection)
{
Thread Thr = new Thread(ParameterizedThreadStart(Send));
Thr.Start(file);
}
это отправляющая часть
private void Send(string location)
{
TcpClient MyClient = null;
FileStream MyFileStream = null;
byte[] MyBuffer = null;
int dSize = 0;
try
{
MyClient = new TcpClient("127.0.0.1", 5555);
MyFileStream = new FileStream(location, FileMode.Open, FileAccess.Read);
MyBuffer = new byte[1024];
Console.WriteLine("Transfering Data...");
while (true)
{
try
{
dSize = MyFileStream.Read(MyBuffer, 0, MyBuffer.Length);
MyClient.GetStream().Write(MyBuffer, 0, dSize);
if (dSize == 0)
break;
}
catch (Exception er)
{
Console.WriteLine(er.Message);
}
}
MyFileStream.Close();
MyClient.Close();
MyBuffer = null;
Console.WriteLine("Transfer Complete");
}
catch (Exception er)
{
Console.WriteLine(er.Message);
}
}
и это приемная часть
private void Receive(string location)
{
TcpClient MyClient = null;
FileStream MyFileStream = null;
byte[] MyBuffer = null;
int dSize = 0;
try
{
MyClient = MyListener.AcceptTcpClient();
Console.WriteLine("Connection Made");
MyFileStream = new FileStream(location, FileMode.Create, FileAccess.Write);
MyBuffer = new byte[4096];
while (true)
{
dSize = MyClient.GetStream().Read(MyBuffer, 0, MyBuffer.Length);
MyFileStream.Write(MyBuffer, 0, dSize);
if (dSize == 0)
break;
}
MyFileStream.Close();
MyClient.Close();
MyBuffer = null;
Console.WriteLine("Transfer Complete");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Может кто-нибудь сказать мне, в чем проблема, а также для клиентской стороны, должен ли я запускать tcplistner для получения файлов с сервера?
Заранее спасибо.