Извеняюсь ...
Клиент (отправляю )
// Перехват сообщений об ошибках соединения и передачи
try
{
try
{
// Соединяемся с сервером. Параметры компонента IdTCPClient1:
// Host: localhost, Port: 6001
Client->Host = Settings->EHost->Text; // Сервер
Client->Port = StrToInt(Settings->Port->Text); // Порт
Client->Connect(); // Подключаемся
Screen->Cursor = crHourGlass;//Курсор
Logg->Lines->Add(ExtractFileName(FileName));//Имя передаваемого файла покажим юзеру
int fh=FileOpen(FileName,Sysutils::fmOpenRead);
int fl=FileSeek(fh,0,2); //Размер файла
FileClose(fh);
Logg->Lines->Add("Размер: "+IntToStr(fl));//Размер файла
//Client->IOHandler->WriteLn(CompName); // запишим в поток имя Станции
Client->IOHandler->WriteLn(ExtractFileName(FileName)); // запишим в поток имя файла
Client->IOHandler->WriteLn(IntToStr(fl)); // запишим в поток размер файла
//Передаём выбранный файл
Client->IOHandler->WriteFile(FileName); // Этот метод передаёт только данные имя и путь нужно указать
// ПРИСТУПАЕМ К ПЕРЕДАЧИ ИНФОРМАЦИИ ДЛЯ Memo(Protocol) СЕРВЕРА
// ИМЯ ФАЙЛА МЫ УЖЕ ПЕРЕДАЛИ В СТРОКЕ Client->IOHandler->WriteLn(ExtractFileName(FileName));
// Передаём информацию о размере переданного файла
Logg->Lines->Add("Отправлен файл: (" +ExtractFileName(FileName)+")"+Times);
}
catch(...)
{
// В случае ошибки выводим сообщение
Logg->Lines->Add("Ошибка соединения или передачи данных");
}
}
__finally
{
// Закрываем соединение с сервером
Client->Disconnect();
Screen->Cursor = crDefault;//Нормальный курсор
OutProgress->Position = 0;
}
Сервер (принимаю)
void __fastcall TForm1::ServerPExecute(TIdContext *AContext)
{
AnsiString C_Path = ExtractFilePath(Application->ExeName)+ "\Incom\\"; // ExtractFileName(AContext->Connection->IOHandler->ReadLn()); // "C:\\Incom"+ ExtractFileName(AContext->Connection->IOHandler->ReadLn());
AnsiString Names = AContext->Connection->IOHandler->ReadLn(); // Считаем имя файла из потока
AnsiString fsize = AContext->Connection->IOHandler->ReadLn(); // Считываем размер файла из потока
C_Path = C_Path + Names;
Protocol->Clear();
ArcName = Names;
// Создаём поток для чтения байтов файла
TFileStream *SF ;
if(!FileExists(C_Path)){
SF = new TFileStream(C_Path,Classes::fmCreate);
}
else
{
SF = new TFileStream(C_Path,Sysutils::fmOpenWrite); ///Sysutils::fmOpenWrite
}
SF->Position = 0;
// Принимаем файл из сетевого потока
// первый параметр - поток, второй - кол-во байт, которые нужно прочитать (-1 - весь поток), третий - читать до разъединения.
AContext->Connection->IOHandler->ReadStream(SF, -1, true);
// Очищаем файловый поток
SF->Free();
// СЧИТЫВАЕМ ИНФОРМАЦИЮ О ФАЙЛЕ
if ( Application->MainForm->WindowState!=wsMinimized ) /// (Application->MainForm->WindowState=wsNormal)
{
Show();
//Если форма свёрнута(или на весь экран) показываем сообщение из трэя
TrayIcon1->BalloonTitle="Принят файл";
TrayIcon1->BalloonHint="От: ["+AContext->Connection->Socket->Binding->PeerIP+":"+StrToInt(AContext->Connection->Socket->Binding->PeerPort)+"] \n\rИмя:"+Name+" размер: "+fsize+" кб";
TrayIcon1->BalloonFlags=bfInfo;
TrayIcon1->ShowBalloonHint();
}
// Переменные Names и fsize передаются клиентом перед передачей самого файла
Protocol->Lines->Add("Принят файл: " + Names +" (размер: " + fsize +" байт)");
Protocol->Lines->Add("От: IP ["+AContext->Connection->Socket->Binding->PeerIP+":"+StrToInt(AContext->Connection->Socket->Binding->PeerPort)+"]");
UnpackFiles();
}
//--------------------------------------------------------------------------
По одному файлу принимает хорошо но когда одновременно с двух компов тогда ошибка вылетает необяснимая
Помогите пожалуйста