Главная страница
    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.008 c
2-1135016134
Viktop
2005-12-19 21:15
2006.01.08
Разбить текстовый файл


14-1134396057
VirEx
2005-12-12 17:00
2006.01.08
синхронизация потоков в API


14-1134463904
Иван Шихалев
2005-12-13 11:51
2006.01.08
Смайлы для Миранды


2-1135003854
Majesto
2005-12-19 17:50
2006.01.08
Вопрос по SQL. Работа с несколькими таблицами.


2-1135054933
Новенькая
2005-12-20 08:02
2006.01.08
SaveDialog





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