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

Вниз

Проблеммы с 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-69838
DeMoN-777
2002-04-11 04:14
2002.04.22
ListBox


14-69976
False_Delirium
2002-03-12 10:07
2002.04.22
Microsoft не перестаёт удивлять..:)...


6-69966
rambo69
2002-02-08 20:32
2002.04.22
Снова сетевой трафик


1-69856
JMax
2002-04-09 06:43
2002.04.22
Мышь


1-69843
snoup
2002-04-10 19:56
2002.04.22
Как сделать TButton например круглым и красным?