Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Вниз

Проблеммы с Socket   Найти похожие ветки 

 
Turalyon   (2002-02-11 16:49) [0]

Подскажите пожалуйста что я делаю не так... Разбираюсь с копонентами ClientSocket и ServerSocket. Делаю все пока в одной программе... С посылкой сообщений методоми SendText и ReciveText все работает как часы... но мне надо передавать другую информацию.. (Для простоты пока передаю туже строку) Я пытаюсь сделать через SendBuf и соответственно ReciveBuf, у меня она без конца вылетает... Вот код.

procedure TForm1.Button1Click(Sender: TObject);
var buf : PChar;
begin
// GetMem(Buf,Length(Edit1.Text)+1);
Buf := PChar(Edit1.Text);
ClientSocket1.Socket.SendBuf(Buf, Length(Edit1.Text)+1);
//ClientSocket1.Socket.SendText(Edit1.Text);
// FreeMem(Buf);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Open;
ServerSocket1.Open;
end;


procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Buf : PChar;
Len : LongInt;
begin
Len := Socket.ReceiveLength;
GetMem(Buf,Len+1);
Socket.ReceiveBuf(Buf,Len);
Memo1.Lines.Add(StrPas(Buf));
// Memo1.Lines.Add(Socket.ReceiveText);
// FreeMem(Buf);
end;


Я уже как только не пробовал. Чувствую что ответ наповерхности.. а понять не могу.


 
Набережных С.   (2002-02-11 18:53) [1]

procedure TForm1.Button1Click(Sender: TObject);
var buf : PChar;
begin
Buf := PChar(Edit1.Text);
ClientSocket1.Socket.SendBuf(Buf ^, Length(Buf));
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Buf : PChar;
Len : LongInt;
begin
Len := Socket.ReceiveLength;
GetMem(Buf,Len);
try
Socket.ReceiveBuf(Buf ^,Len);
Memo1.Lines.Add(Buf);
finally
FreeMem(Buf);
end;
end;


 
Turalyon   (2002-02-12 08:38) [2]

>Набережных С.
Спасибо большое, перестало ругаться... только при преме из сокета, в конец какой-то мусор дописывает 3-5 символов..., причем длинна полученная (Socket.ReceiveLength) совпадает отправленной...


 
Digitman (M)   (2002-02-12 10:38) [3]


procedure TForm1.Button1Click(Sender: TObject);
var
buf : PChar;
len : Integer;
begin
Buf := PChar(Edit1.Text);
len := Length(Buf) + 1;
ClientSocket1.Socket.SendBuf(Len, SizeOf(len));
ClientSocket1.Socket.SendBuf(Buf^, len);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var Buf, p : PChar;
Len : LongInt;
i : Integer;
begin
if Socket.ReceiveBuf(Len, SizeOf(Len)) = SizeOf(Len) then begin
GetMem(Buf,Len);
p := Buf;
try
while Len > 0 do begin
i := Socket.ReceiveBuf(p^, Len);
Dec(Len, i);
Inc(p, i);
end;
Memo1.Lines.Add(Buf);
finally
FreeMem(Buf);
end
end;
end;



 
Turalyon   (2002-02-12 16:04) [4]

>Digitman (M)
Спасибо большое! Все заработало (передает), НО локально, т.е. на одной машине.
Как только я запускаю прогу на другой машине, точнее не запускаю, а передаю ей какую-то информацию вылетает сообщение.
"Windows socket error : ..... on API "recv""

Коннект проходит нормально.


 
Digitman (M)   (2002-02-12 17:10) [5]

Ты почитай про ReceiveLength повнимательней. В особенности - в ремарки вникни. Да задействуй его в теле рисивера, потому как я упростил код рисивера для наглядности. Да еще посмотри, как работает рисивер в методе TSocketTransport.Receive() (модуль SConnect), дабы на грабли не наступать и велосипед не изобратать. Изучи, как это делает сам Борланд !



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
14-69998
Alx2
2002-03-15 07:57
2002.04.22
Merlin, с Днем Рождения!


3-69690
Cobalt
2002-03-30 09:33
2002.04.22
Справочник API по ODBC


1-69783
Pafnuty
2002-04-10 12:23
2002.04.22
Системное время.


6-69945
otari
2002-02-09 22:48
2002.04.22
Это очен интересно !!!


1-69877
Еще один Новичок
2002-04-09 11:24
2002.04.22
Pos() для двоичных данных





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