Сокеты в делфи
От: koyote  
Дата: 18.02.04 20:03
Оценка:
пишу клиент — серверную прогу. Реализую через компоненты TClientSocket и TServerSocket. Клиент читает и пишет в режиме Blocking, т.е. Через TWinSocketThread для чтения сообщений сервера код следующий (он работает по обработке события OnConnect):

Глобальные переменные

var
  sktStream: TWinSocketStream;

procedure TForm1.sktConnect(Sender: TObject; Socket: TCustomWinSocket);
var s: PChar;
    i:integer;
begin
   Memo1.Lines.Add('Connection complite');
   sktStream:=TWinSocketStream.Create(Socket,6000);
   sktStream.Write('hello',5);
   while not sktStream.WaitForData(100) do
      Application.ProcessMessages;
   i:=sktStream.Read(s,1);
   Memo1.Lines.Insert(0,s);
end;

Но клиент получает какуюто абюрокадабру, хотя сервер получает слово "hello" нормально, подскажите что делать. Заранее благодарен
Re: Сокеты в делфи
От: Yanish  
Дата: 19.02.04 04:40
Оценка:
Здравствуйте, koyote, Вы писали:

K>пишу клиент — серверную прогу. Реализую через компоненты TClientSocket и TServerSocket. Клиент читает и пишет в режиме Blocking, т.е. Через TWinSocketThread для чтения сообщений сервера код следующий (он работает по обработке события OnConnect)

K>Но клиент получает какуюто абюрокадабру, хотя сервер получает слово "hello" нормально, подскажите что делать. Заранее благодарен

проблема в том что ты отправляешь не тот тип
K> sktStream.Write('hello',5);
нужно передавать хотябы массив символов, к примеру вот так это должно работать:

procedure TForm1.sktConnect(Sender: TObject; Socket: TCustomWinSocket);
const
  Temp = 'hello';
var s: PChar;
    i:integer;
        Buff: array [0 .. MAXPATH] of char; 
        
begin
  for i := 0 to Length(Temp) do
      Buff[i] := Temp[i + 1];
   Memo1.Lines.Add('Connection complite');
   sktStream:=TWinSocketStream.Create(Socket,6000);
   sktStream.Write(Buff,Length(Buff));
   while not sktStream.WaitForData(100) do
      Application.ProcessMessages;
   i:=sktStream.Read(s,1);
   Memo1.Lines.Insert(0,s);
end;

и соответственно на сервере тоже отправлять не конст строку 'hello'(к примеру).
... << RSDN@Home 1.1.3 beta 1 >>
Re[2]: Сокеты в делфи
От: koyote  
Дата: 19.02.04 19:26
Оценка:
пробовал и так сделать, всё равно не работает
Re: Сокеты в делфи
От: ArtDenis Россия  
Дата: 20.02.04 07:38
Оценка:
Здравствуйте, koyote, Вы писали:

K>
K>var
K>  sktStream: TWinSocketStream;

K>procedure TForm1.sktConnect(Sender: TObject; Socket: TCustomWinSocket);
K>var s: PChar;
K>    i:integer;
K>begin
K>   Memo1.Lines.Add('Connection complite');
K>   sktStream:=TWinSocketStream.Create(Socket,6000);
K>   sktStream.Write('hello',5);
K>   while not sktStream.WaitForData(100) do
K>      Application.ProcessMessages;
K>   i:=sktStream.Read(s,1);
K>   Memo1.Lines.Insert(0,s);
K>end;
K>


А s куда указывает, на деревню дедушке?
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.