Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сокеты [D6, Win2k]


Страницы:   1 2

Freedom ©   (2005-01-08 22:24:00) 

Здравствуйте!
Используя коспоненты ClientSocket и ServerSocket,реализовал две программы Клиент и Сервер.Две программы могут передавать друг другу сообщения и передавать файлы.Возникла проблема в передачи файла.Файлы передаю через   ClientSocket1.Socket.SendStream(TFileStream.Create(filename,fmOpenRead or fmShareDenyWrite));
На сервере имеется обрабработчик onread, который принимает как текстовые сообщения так и файлы.Выглядит это так:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var ilen,z: Integer;
    buf: Pointer;
begin
//прием текстового сообщения
if (Socket.ReceiveText<>'send')  and (not flag) then
 begin
  ListBox1.Items.Add('Client: '+Socket.ReceiveText);
  for z := 0 to ServerSocket1.Socket.ActiveConnections-1 do ServerSocket1.Socket.Connections[z].SendText('Client: '+Socket.ReceiveText);
  // прием файла
 end
 else
  if flag then
   begin
 {Открываем временный файл для записи}
 FStream := TFileStream.Create('myfile.tmp',fmCreate or  fmShareDenyWrite);

{Записываем в l размер полученного блока}
   ilen := Socket.ReceiveLength;
   {Заказываем память для буфера}
   GetMem(buf,ilen);
   {Записываем в буфер полученный блок}
   Socket.ReceiveBuf(buf^,ilen);
       {Ставим позицию в конец файла}
   try
   Socket.ReceiveBuf(Buf^, iLen);
   FStream.Write(Buf^, iLen);
 finally
   FreeMem(Buf);
end;
    ListenFileEdit.Text:='Получен файл';
  end
  else
   begin
    flag:=true;
    exit;
   end;
end;
Текстовые сообщения принимает отлично,а вот файл получается пустым.Если переставить код принятие файла до приема простых сообщений,то все отлично.
Посоветуйте пожалуйства,что делать.
Не охото вставлять второй компонент на форму.


Alexander Panov   (2005-01-10 01:12:00) [21]

Eraser ©   (09.01.05 0:12) [1]
Используй Indy, и забей на ClientSocket и ServerSocket, на них ничего серьёзного не сделаешь, по причине отсутствия многозадачности.


Тебе кто об этом сказал? Или на собственном опыте убедился?


Eraser   (2005-01-10 00:43:00) [22]

kaZaNoVa
Спору нет )) Indy на API и написаны! Просто делать серьёзный сервер на API это почти тоже самое, что делать приложение Win32 на ассмеблере, можно, но не очень просто...
Хотя в некоторых случаях без API не обойтись. Но Indy предоставляет дескрипторы!


Alexander Makhanev   (2005-01-09 20:11:00) [23]


> Eraser ©   (09.01.05 00:12) [1]

У меня на ServerSocketThread/ClientSocketThread все отлично работает...


kaZaNoVa   (2005-01-09 19:20:00) [24]

API сокеты рулят !!!


Дмитрий В. Белькевич   (2005-01-09 19:14:00) [25]

Релиз десятой уже вышел? Пойду гляну. И, конечно же, причина, не [1]. Просто Инди гораздо удобнее. Зачем, собсно, и делались.


Eraser   (2005-01-09 13:38:00) [26]

Дмитрий В. Белькевич
Уже 10 версия вышла, успешно юзаю )))


Polevi   (2005-01-09 12:48:00) [27]

>Eraser ©   (09.01.05 00:12) [1]
ну это просто LOL


VMcL   (2005-01-09 11:17:00) [28]

http://www.indyproject.org/
Вроде, оно.


TButton   (2005-01-09 07:15:00) [29]


> Используй Indy, и забей на ClientSocket и ServerSocket,
> на них ничего серьёзного не сделаешь, по причине отсутствия
> многозадачности.


> Ерейзер дело говорит. Пользуй Инди, желательно 9-ю версию
> посвежее поставить. Там всё просто до слёз.

можно линк, а то в 5й дельфе индей не густо.


Дмитрий В. Белькевич   (2005-01-09 06:38:00) [30]

Ерейзер дело говорит. Пользуй Инди, желательно 9-ю версию посвежее поставить. Там всё просто до слёз.


Eraser   (2005-01-09 00:12:00) [31]

Используй Indy, и забей на ClientSocket и ServerSocket, на них ничего серьёзного не сделаешь, по причине отсутствия многозадачности.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо