Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Socket, первое сообщение пустое 
V
    Опции темы
Exai1e
Дата 21.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Здрасти, возникла такая проблема:
Клиент при подключении посылает текст
Код

procedure TfrmMain.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ClientSocket1.Socket.SendText(Nick); 
end;

{
procedure TfrmMain.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ClientSocket1.Socket.SendText(Nick); 
end;
так тоже пробывал}


Сервер:

Код

procedure TfrmMain.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText); 
end;


При подлючении на сервер приходит "пустое" сообщение, а если дисканектнуться и заново подключиться и снова отослать то все нормально, на сервер приходит нужный текст, почему так ?...

----

Тут вот какое дело:
На сервере при получении информации висит получени файла
Код

procedure TfrmMain.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  s, sl: string;
  FileSend : TFileStream;
  i : integer;
  MyStream : array of TMemoryStream;
begin
  s:= Socket.ReceiveText;

  if Reciving then
    begin
      fs.Write(s[1], length(s));
        if fs.Size=DataSize then
          begin
            fs.Free;
            Reciving:=false;
            Flagsss := True;
          end;
    end
      else
    begin
      if copy(s, 1, 17)='FileGoServerSize:' then
        begin
          sl:=copy(s, 18, Pos(#0, s)-18);
          DataSize:=StrToInt(sl);
          Delete(s, 1, Pos(#0, s));
          Reciving:=true;
          fs:=TFileStream.Create('output',fmCreate);
          fs.Write(s[1], length(s));
        end;
    end;

  if Flagsss then
    begin
      SetLength(MyStream,ServerSocket1.Socket.ActiveConnections);
      FileSend:=TFileStream.Create('output',fmOpenRead);
      for i:=0 to ServerSocket1.Socket.ActiveConnections - 1 do
        begin
          FileSend.Position:=0;
            if ServerSocket1.Socket.Connections[i].SocketHandle <>
              Socket.SocketHandle then
              begin
                MyStream[i]:=TMemoryStream.Create;
                MyStream[i].WriteBuffer(DataSize,4);
                MyStream[i].CopyFrom(FileSend, FileSend.Size);
                MyStream[i].Position:=0;
                ServerSocket1.Socket.Connections[i].SendStream(MyStream[i]);
              end;
        end;
      FileSend.Free;
      SetLength(MyStream,0);
      Flagsss:=False;
    end;
end;


Код

ShowMessage(s);


Выдает первое сообщение, но как тогда поступить если посылается файл... 
Т.е. можно ли такое реализовать чтобы первое сообщение от клиента записывалось в массив или еще куданить а потом обходить запись Ника в массив и принимать фаил ?

Это сообщение отредактировал(а) Exai1e - 22.11.2007, 09:29


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Exai1e
Дата 22.11.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Всем спасибо, нашел выход smile надо было просто подумать головой smile о чем я частенько забываю smile ;)


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
MetalFan
Дата 22.11.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Exai1e @  22.11.2007,  21:33 Найти цитируемый пост)
Всем спасибо, нашел выход

хоть бы рассказал, что за выход то ;)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Exai1e
Дата 22.11.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



MetalFan, Да самый простейший smile

Код

procedure TfrmMain.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ClientSocket1.Socket.SendText('*' + Nick);
end;


Код

...
  s := Socket.ReceiveText;
  if copy(s, 0, 1) = '*' then
  begin
    lbClients.Items.Add(s); 
  end
  else
  begin

  if Reciving then
...


Сервер:
Код

...
  s:= Socket.ReceiveText;
  if copy(s, 0, 1) = '*' then
  begin
    AllNick := s;
     for i:=0 to ServerSocket1.Socket.ActiveConnections - 1 do
        begin
          ServerSocket1.Socket.Connections[i].SendText(s);
        end;
  end
  else
...

Конечно я не думаю что он хороший, но всеже работает smile
ЗЫ: Если есть более удачные и правильные варианты то рад буду услышать smile

Это сообщение отредактировал(а) Exai1e - 22.11.2007, 22:40


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.