Slesh, привет. Делаю консольно winsock winapi проложение, которое посылает web-сереверу get запрос и получает вывод и выводит его функцей Write(), но каждый раз при получение ответа попадаются иероглифы в конце ответа вот код PHP: ... Buffer,b2: array[0..4096] of Char; Header: string; .... if connect(ClientSocket, DestAddr, SizeOf(DestAddr)) <> INVALID_SOCKET then begin Header := 'GET /script.php HTTP/1.1'+#13#10+ 'Host: localhost'+#13#10+ 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5'+#13#10+ 'Accept: text/html'+#13#10+ 'Connection: close'+#13#10#13#10; lstrcpy(b2, PCHar(header)); send(ClientSocket, b2, Length(b2), 0); recv(ClientSocket, Buffer, SizeOf(Buffer), 0); Write(Buffer); readln; end;
мдаааа. Читай данные в бесконечном цикле, пока recv не вернет 0.И выводи через MessageBoxA ,тогда точно иероглифов небудет)
при том, что размера буфера может и не хватить для полученных данных, во-вторых надо наверное знать сколь данных ты прочитал из сокета, и писать только полученные, а не тупо весь буфер, потому как фиг знает что там будет, то ли нолики, а то ли мусор всякий
ну дык когда получаешь данные, автоматом последний символ делай равным 0x00 т.е. цикл чтения len := recv(***); if len > 0 then begin buf[len] := #0; end; Потому что array[0..***] of Char; это аналог Ansi строки. А они заканчиваются символом с кодом 0.
1. Buffer : array of AnsiChar; 2. Бесконечный цикл чтение как было сказанно выше. Вообще один хороший человек мне как то говорил, что читать нужно байты те самые волшебные [Buffer : array of Byte], а потом переводить в текст и радоваться P.S. Должно вернуть нормальный текст. В AnsiChar.