пишу клиент — серверную прогу. Реализую через компоненты 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" нормально, подскажите что делать. Заранее благодарен
Здравствуйте, 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 >>
Здравствуйте, 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 >>