![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с Сокетами [D6, Win2k]
Sam05 © (2005-09-19 13:47:00)Отправка сообщения
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 и более, то процедура приема показывает то значение которое передавалось. Кто нить будте любезны помогите что это такое твариться
Sam05 (2005-09-26 10:28:00) [1]Огромное спасибо все работает
Digitman (2005-09-19 16:41:00) [2]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-19 16:21:00) [3]Ой, я вас наверно уже замучил, вроде как все работатет
Результат := ClientSocket1.Socket.SendBuf(Buf^,РАЗМЕР_ПЕРЕДАВАЕМЫХ_ДАННЫХ!!!); вместо РАЗМЕР_ПЕРЕДАВАЕМЫХ_ДАННЫХ!!! я использую StrLen(buf)
, но если пепредаю меньше 3 символов, то первым бывает мой а еще 2 или 1 мусор? с чем это связано? причем J у меня равно 1 или 2, т.е. реальное количество переданных и принятых символов, а выходи "1ЖЕ" если послал "1" или "12Е" если послал 12
Digitman (2005-09-19 15:58:00) [4]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 15:39:00) [5]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:34:00) [6]приводи свой вариант кода С УЧЕТОМ [1]
Sam05 (2005-09-19 15:30:00) [7]а какая еще может быть ошибка , пример то простой, вот если беру напрямую переменной Buf присваиваю какое нить строчное значение причем длинна не имеет значение (buf:='1312313131313123') или даже (buf:='13') , и возвращаю все как было у меня, а не предложеный вами вариант, то принимаю все что угодно, а вот если вместо (buf:='1312313131313123'), написать
sss:='1312313131313123';
buf:=PChar(sss); то проходять тоже все символы, а вот если
sss:='13';
buf:=PChar(sss); то опять возвращает "4", ну объясните почему, ведь другого кода нет в этом примере.
Digitman (2005-09-19 15:02:00) [8]значит у тебя ошибка в программе
Sam05 (2005-09-19 14:26:00) [9]Спасибо за ответ, что то получилось, но все же
почему то при получении получаю 4 символа которые отправил, а остальные какие то левый, не мои
Digitman (2005-09-19 14:02:00) [10]точнее
Прием
buf :PChar;
begin
i:=socket.ReceiveLength; //определяем макс.размер данных, которые м.б. потенциально доступны при последующем чтении
GetMem(buf, i); //выделяем память под буфер размером i !!!!!!!!!!!байт !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
j:=socket.ReceiveBuf(Buf ^, i); //читаем НЕ более i байт в буфер по адресу, хранящемуся в указ.переменной buf
// в j - АКТУАЛЬНЫЙ размер принятых данных (он ВСЕГДА будет =< i)
<Цитата>
Digitman (2005-09-19 13:58:00) [11]
> что это такое твариться
"тв Арится" то что и ожидалось как результати незнания Паскаля.
Отправка сообщения
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);