Форум: "Сети";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизРабота с Сокетами Найти похожие ветки
← →
Sam05 (2005-09-19 13:47) [0]Отправка сообщения
buf :PChar;
begin
sss:=Edit1.Text;
buf:=PChar(sss);
ClientSocket1.Socket.SendBuf(Buf,SizeOf(buf));
Прием
buf :PChar;
begin
i:=socket.ReceiveLength;
j:=socket.ReceiveBuf(Buf,sizeof(buf));
Теперь вопрос:
Если в Edit1.Text записать строку в которой меньше или 3 символа, то процедура приема принимает в buf значение "4", ежели количестов символов 4 и более, то процедура приема показывает то значение которое передавалось. Кто нить будте любезны помогите что это такое твариться
← →
Digitman © (2005-09-19 13:58) [1]
> что это такое твариться
"твАрится" то что и ожидалось как результати незнания Паскаля.
Отправка сообщения
buf :PChar;
begin
sss:=Edit1.Text;
buf:=PChar(sss);
ClientSocket1.Socket.SendBuf(Buf^,SizeOf(buf));
Прием
buf :PChar;
begin
i:=socket.ReceiveLength;
j:=socket.ReceiveBuf(Buf^, i);
← →
Digitman © (2005-09-19 14:02) [2]точнее
Прием
buf :PChar;
begin
i:=socket.ReceiveLength; //определяем макс.размер данных, которые м.б. потенциально доступны при последующем чтении
GetMem(buf, i); //выделяем память под буфер размером i !!!!!!!!!!!байт !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
j:=socket.ReceiveBuf(Buf^, i); //читаем НЕ более i байт в буфер по адресу, хранящемуся в указ.переменной buf
// в j - АКТУАЛЬНЫЙ размер принятых данных (он ВСЕГДА будет =< i)
<Цитата>
← →
Sam05 (2005-09-19 14:26) [3]Спасибо за ответ, что то получилось, но все же
почему то при получении получаю 4 символа которые отправил, а остальные какие то левый, не мои
← →
Digitman © (2005-09-19 15:02) [4]значит у тебя ошибка в программе
← →
Sam05 (2005-09-19 15:30) [5]а какая еще может быть ошибка , пример то простой, вот если беру напрямую переменной Buf присваиваю какое нить строчное значение причем длинна не имеет значение (buf:="1312313131313123") или даже (buf:="13") , и возвращаю все как было у меня, а не предложеный вами вариант, то принимаю все что угодно, а вот если вместо (buf:="1312313131313123"), написать
sss:="1312313131313123";
buf:=PChar(sss); то проходять тоже все символы, а вот если
sss:="13";
buf:=PChar(sss); то опять возвращает "4", ну объясните почему, ведь другого кода нет в этом примере.
← →
Digitman © (2005-09-19 15:34) [6]приводи свой вариант кода С УЧЕТОМ [1]
← →
Sam05 (2005-09-19 15:39) [7]procedure TForm1.Button1Click(Sender: TObject);
var
buf :PChar;
begin
Buf:=PChar(Edit1.Text);
ClientSocket1.Socket.SendBuf(Buf^,SizeOf(Buf));
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
i,j,k,l:integer;
buf :PChar;
begin
i:=socket.ReceiveLength;
GetMem(buf, i);
j:=socket.ReceiveBuf(Buf^,i));
memo1.Lines.Add("Получили: "+inttostr(i)+" "+buf+" ");
end;
Вот мой код
← →
Digitman © (2005-09-19 15:58) [8]procedure TForm1.Button1Click(Sender: TObject);
var
buf :PChar;
begin
Buf:=PChar(Edit1.Text);
Результат := ClientSocket1.Socket.SendBuf(Buf^,РАЗМЕР_ПЕРЕДАВАЕМЫХ_ДАННЫХ!!!);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
i,j,k,l:integer;
buf :PChar;
begin
i:=socket.ReceiveLength;
GetMem(buf, i);
try
j:=socket.ReceiveBuf(Buf^,i));
memo1.Lines.Add("Получили: "+inttostr(j)+" байт : "+buf+" ");
finally
FreeMem(buf);
end;
end;
← →
Sam05 (2005-09-19 16:21) [9]Ой, я вас наверно уже замучил, вроде как все работатет
Результат := ClientSocket1.Socket.SendBuf(Buf^,РАЗМЕР_ПЕРЕДАВАЕМЫХ_ДАННЫХ!!!); вместо РАЗМЕР_ПЕРЕДАВАЕМЫХ_ДАННЫХ!!! я использую StrLen(buf)
, но если пепредаю меньше 3 символов, то первым бывает мой а еще 2 или 1 мусор? с чем это связано? причем J у меня равно 1 или 2, т.е. реальное количество переданных и принятых символов, а выходи "1ЖЕ" если послал "1" или "12Е" если послал 12
← →
Digitman © (2005-09-19 16:41) [10]procedure TForm1.Button1Click(Sender: TObject);
begin
Результат := ClientSocket1.Socket.SendBuf(PChar(Edit1.Text)^,Length(Edit1.Text)+1);
if Результат < Length(Edit1.Text)+1 then
читать док-цию по неблок.режиму
end;
← →
Sam05 (2005-09-26 10:28) [11]Огромное спасибо все работает
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c