Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

Сокеты   Найти похожие ветки 

 
Олег_Иванов   (2007-08-22 07:56) [0]

Уважаемые мастера.
Почему при этом коде нельзя загружать файлы более 15 МБ.

//Клиент
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Open; // Открываем сокет
Receive := false; // Режим клиента - приём команд
MS := TMemoryStream.Create;
end;

procedure TForm1.Writing(Text: string);
begin
if MS.Size < Size then // Если принято байт меньше размера файла, то...
MS.Write(Text[1], Length(Text)); // Записываем в буфер
// Выводим прогресс закачки файла
ProgressBar1.Position := MS.Size*100 div Size;
StatusBar1.SimpleText := "Принято "+IntToStr(MS.Size)+" из "+IntToStr(Size);
if MS.Size = Size then // Если файл принят, то...
begin
Receive := false; // Переводим клиента в нормальный режим
MS.Position := 0; // Переводим каретку в начало буфера
MS.SaveToFile(Name); // Сохраняем файл
ClientSocket1.Socket.SendText("end"); // Посылаем команду "end", то есть файл принят
MS.Free; // Убиваем буфер
StatusBar1.SimpleText := "Файл принят";
end;
Application.ProcessMessages;
if ProgressBAr1.Position = 100 then
ProgressBAr1.Position:=0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClientSocket1.Close; // Закрываем сокет
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
  StatusBar1.SimpleText := "Соединение установлено";
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
  StatusBar1.SimpleText := "Соединение не установлено";
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
  Rtext: string; // Принятый текст
begin
  Rtext := Socket.ReceiveText;
  if Receive then
  begin // Если клиент в режиме приёма файла, то...
   //  ShowMessage(Inttostr(MS.Size));
     Writing(RText); // Записываем данные в буфер
  end
  else // Если клиент не в режиме приёма файла, то...
  if Copy(Rtext, 0, Pos("#", Rtext) -1) = "file" then // Если это файл, то...
  begin  // Создаём буфер для файла
     Delete(Rtext, 1, Pos("#", Rtext)); // Определяем имя файла
     Name := Copy(Rtext, 0, Pos("#", Rtext) -1); // Определяем имя файла
//      Name:="c:\sdd.reg";
     Delete(Rtext, 1, Pos("#", Rtext)); // Определяем размер файла
     Size := StrToInt(Copy(Rtext, 0, Pos("#", Rtext) -1)); // Определяем размер файла
     Delete(Rtext, 1, Pos("#", Rtext)); // Удаляем последний разделитель
     Label1.Caption := "Размер файла: "+IntToStr(Size)+" байт"; // Выводим размер файла
     Label2.Caption := "Имя файла: "+Name; // Выводим имя файла
     Receive := true; // Переводим сервер в режим приёма файла
     Writing(RText); // Записываем данные в буфер
end;
end;

//Сервер
var
 Form1: TForm1;
 MS: TMemoryStream; // Буфер для файла
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Open; // Открываем сокет
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ServerSocket1.Close; // Закрываем сокет
end;

procedure TForm1.Button1Click(Sender: TObject);
var

Size: integer;

P: ^Byte;

begin
if not OpenDialog1.Execute then Exit;
Edit1.Text:=OpenDialog1.FileName;
MS := TMemoryStream.Create; // Создаём буфер для файла
MS.LoadFromFile(Edit1.Text); // Загружаем файл в буфер
// Посылаем информацию о файл (команда # название # размер)
ServerSocket1.Socket.Connections[0].SendText("file#"+Edit1.Text+"#"+IntToStr(MS.Size)+"#");
MS.Position := 0; // Переводим каретку в начало файла
P := MS.Memory; // Загружаем в переменную "P" файл
Size := ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size); // Посылаем файл
// Выводим прогресс
ProgressBar1.Position := Size*100 div MS.Size;
StatusBar1.SimpleText := "Отправлено "+IntToStr(Size)+" из "+IntToStr(MS.Size)+" байт";
Application.ProcessMessages;
if ProgressBAr1.Position = 100 then
ProgressBAr1.Position:=0;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
if Socket.ReceiveText = "end" then // Если клиент принял файл, то...
begin
StatusBar1.SimpleText := "Клиент принял файл";
MS.Free; // Убиваем буфер
end;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := "Соединение установлено";
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := "Соединение не установлено";
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
  ErrorCode:=0;
 
end;


 
Сергей М. ©   (2007-08-22 08:06) [1]

Где у тебя анализ результата вызова функционального метода SendBuf ?
Почему не воспользоваться методом SendStream ?


 
Олег_Иванов   (2007-08-22 08:25) [2]

А как произвести анализ SendBuf


 
Сергей М. ©   (2007-08-22 08:26) [3]


> как произвести анализ SendBuf


А справку по этому поводу ты уже проштудировал ?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.057 c
3-1182845730
Yasmin
2007-06-26 12:15
2007.11.04
Не обновляются данные


15-1191378171
Slider007
2007-10-03 06:22
2007.11.04
С днем рождения ! 3 октября 2007 среда


15-1190833172
Ricks
2007-09-26 22:59
2007.11.04
Новый компьютер -> новые возможности -> новые проблемы


8-1168798135
default_user
2007-01-14 21:08
2007.11.04
Как OGG перегнать в MP3 или хотя бы в WAV?


2-1192163293
Stud
2007-10-12 08:28
2007.11.04
Где найти алгоритм перебора?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский