Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
2-1135065670
yk
2005-12-20 11:01
2006.01.08
Отправка почты из dll


14-1134455289
Гриха
2005-12-13 09:28
2006.01.08
Блок Инета


1-1133804644
dDan
2005-12-05 20:44
2006.01.08
Сортировка колонки в ListView


14-1134536760
vajo
2005-12-14 08:06
2006.01.08
антивирусы


4-1131079994
msgipss
2005-11-04 07:53
2006.01.08
Функция NtQuerySystemInformation - разве на win2000 не работает ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский