Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизКод нулевого символа Найти похожие ветки
← →
Андреев (2003-12-09 19:38) [0]Нужно по сети передать данные от Клиента к Серверу.
В Клиенте пишу строчку:
ClientSocket.Socket.SendText(#2 + #65 + #0 + #3 + #66);
В Сервере:
k:= Socket.ReceiveLength;
Memo2.SelText:= Socket.ReceiveText;
После пересылке вижу что к=5
а в мемо2 принято только первые два символа, то есть #0 и всё что после него не отображается
Проверял что передаются все коды от #1 до #255 а вот #0 нет.
Что делать? Может какимто другим способом предавать данные?
← →
Polevi (2003-12-09 19:43) [1]SendBuf, RecvBuf
← →
FBI (2003-12-10 07:08) [2]Попробуй переставить местами #0 и #66, и отправь клиенту, если в мемо клиент будет четыре символа, значит, что-то с твоим #0
← →
Anatoly Podgoretsky (2003-12-10 07:37) [3]Нафиг в мемо гнать не текстовые символы.
← →
S@shka (2003-12-10 12:41) [4]Дело в том, что в
в переменныю типа String ты можешь засунуть все что угодно
temp : String = #77 + #22 + #35 + #0 + #55 и. т.д
Но !!!! при отображении этого всего в Memo или в Edit
у тебя обрежется все что за знаком #0 Спросишь почему???
Да потому что Null Terminated String есть такое понятие :)
а знак #0 - есть признак конца таки вот строк. Вот и веьс секрет
← →
Андреев (2003-12-10 16:39) [5]То что #0 это признак конца стринговой переменной я понял.
Но проблема осталась.
Я хотел использовать
ClientSocket.Socket.SendText(#2 + #65 + #0 + #3 + #66);
Но из-за #0 надо придумать что-то другое.
Подскажите пожалуйста как это надо сделать.
Очень надо.
← →
Digitman (2003-12-10 17:01) [6]ты вот скажи, начерта тебе #0 посылать ? никак я в толк не возьму))
← →
Rouse_ (2003-12-10 17:16) [7]> [5] Андреев (10.12.03 16:39)
Эксперементируй с советом Polevi (09.12.03 19:43)и не задавай глупых вопростов...
← →
Fredericco (2003-12-10 18:03) [8]Андреев (10.12.03 16:39) [5]
> То что #0 это признак конца стринговой переменной я понял.
Как ты это понял?
Это признак окнца PChar, TCaption но ни как не String.
Твой нолик к тебе приходит, но проверять надо приблизитеьно так:
var
s,s2:string;
i:integer;
begin
s:= Socket.ReceiveText
s2:="";
for i:=1 to Length(s) do
s2:=s2+"#"+IntToStr(Ord(s[i]));
Memo1.Lines.Add(s2);
← →
Fredericco (2003-12-10 18:05) [9]
> После пересылке вижу что к=5
> а в мемо2 принято только первые два символа, то есть #0
> и всё что после него не отображается
Исчерпывающий ответ на твой вопрос.
← →
skr (2003-12-10 18:07) [10]господа вопрос серьезный - при написании сетевых прог
пользуйте сокетные компоненты на серваках в режиме ServerType = stThreadBlocking, и стартуйте для каждого коннекта нить, иначе данные перекашивает вот!
далее валете в поток что угодно :))
А в методе SendText -ReceiveText теоретически должен произойти переход на другую строку :)
А герр Андреев просто этого не знал, как и ВЫ все :))
← →
Digitman (2003-12-10 18:10) [11]
> пользуйте сокетные компоненты на серваках в режиме ServerType
> = stThreadBlocking
полная чушь.
никакого отношения режим раброты TServerSocket к "нулям" не имеет
← →
Андреев (2003-12-10 21:02) [12]При работе с устройством на прямую через RS232 я использовал
ComPort.WriteString (#1 + #0 + #64 + #44 + #13);
и всё работает.
Но задача в том что надо управлять дистационно используя TCP\IP и #0 создаёт проблему.
Может надо использовать SendStream?
Как это правильно сделать?
А Memo я использую для визуального контроля передачи данных.
← →
panov (2003-12-10 21:32) [13]http://delphimaster.net/view/6-1069862324/
Ответ там уже дан.
← →
Андреев (2003-12-11 19:30) [14]Воспользовался
begin
s:= Socket.ReceiveText;
s2:="";
for i:=1 to Length(s) do
begin
s2:=s2+" "+IntToStr(Ord(s[i]));
Memo1.SelText:=s[i];
end;
Memo2.Lines.Add(s2);
Теперь в Мемо1 вижу принимаемые символы, а в Мемо2 коды этих символов.
Спасибо за помощь.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.021 c