Главная страница
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.49 MB
Время: 0.017 c
2-1135157242
110380
2005-12-21 12:27
2006.01.08
Как сделать в StringGrid цветными каждые нечетные столбцы?


2-1134580039
гость2
2005-12-14 20:07
2006.01.08
Определить открыто ли popup меню


2-1133423104
worldmen
2005-12-01 10:45
2006.01.08
Передать данные в родительскую форму.


14-1134508044
Kerk
2005-12-14 00:07
2006.01.08
Cyber Underground Community VS Terrorism


2-1135245369
Mahab
2005-12-22 12:56
2006.01.08
Копирование файлов