URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3649
[ Назад ]

Исходное сообщение
"вопрос по Winsock для винды"

Отправлено maxval , 27-Ноя-04 16:43 
Люди помогите решить вот такую проблему:
написана программа(FreeBSD) которая сидит на порту и ждет соединения. После соединения клиент (из Windows) посылает команду, например shutdown, но на сервер приходит ".shutdown" где точка это служебный символ какой то, естественно сервер на команду не срабатывает и либо виснет, либо совсем не реагирует. Как бы сделать так чтобы строка приходила без служебного символа? Я понимаю вопрос может и глупый, но я уже все перепробовал...

Исходник клиента(Delphi 7):
procedure TForm1.ShutButtonClick(Sender: TObject);
var
cmd: string[9];
i,V:integer;
begin
i:=0;
WSAStartup(MAKEWORD(2,0), initsocket);
addr.sin_family := PF_INET;
addr.sin_addr := lookupname;
addr.sin_port := htons(1500);
soket:=socket(PF_INET,SOCK_STREAM, IPPROTO_IP);
i:=connect(soket,@addr,sizeof(addr));
if i=0 then
  begin
  Application.ProcessMessages;
  cmd:='shutdown';
  send(soket,cmd,9,0);
  closesocket(soket);
  end
  else  ShowMessage('Error.');
end;



Содержание

Сообщения в этом обсуждении
"вопрос по Winsock для винды"
Отправлено Quarc , 27-Ноя-04 21:52 
Предпологаю что этот символ обозначает длину строки. Пользуй тип PChar или array[0..8] of byte вместо string

"вопрос по Winsock для винды"
Отправлено Alexander S. Salieff , 29-Ноя-04 12:30 
>Предпологаю что этот символ обозначает длину строки. Пользуй тип PChar или array[0..8]
>of byte вместо string

Предположение абсолютно верное. В паскале первый байт в строке - это ее длина, а в C/C++ строка NULL-терминированная. Опираясь на это надо придумать алгоритм конвертации ;)