Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Работа с Сокетами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
3-1131991173
ivb2001
2005-11-14 20:59
2006.01.08
TClientDataSet не видит TDatasetProvider


4-1130664226
злобная танька
2005-10-30 12:23
2006.01.08
Открыть с помощью...


14-1134483178
iamdanil
2005-12-13 17:12
2006.01.08
Для умных программистов


1-1133976207
De1uxe
2005-12-07 20:23
2006.01.08
Ошибка в коде


4-1131022013
Yus
2005-11-03 15:46
2006.01.08
Бысрое копирование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский