Форум: "Сети";
Текущий архив: 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