Hello,
I'm trying to write program which use two TLTCP components - I need to connect to two servers with different ports. When enable only one TLTCP component (comment out TCP*.Connect(...) of second one), it behaves well. But when both are enabled, program hangs after while (about 5 seconds, so some packets are received and send). Simplified code inserted below. BTW, in the listbox I can see "connecting...", "connected", but "connection accepted" never appears... Is is ok? Thanks for any help!
Best regards,
Zdenek Materna
procedure TMainForm.ConnectClick(Sender: TObject);
begin
Stream1.SetSize(0);
StatusBar.SimpleText := 'connecting...';
ListBox1.Items.Add('connecting...');
TCPSock.Connect(Host.Text, Port.Value);
TCPcom.Connect(Host.Text, Port1.Value);
end;
procedure TMainForm.TCPcomAccept(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPcom: connection accepted on server');
end;
procedure TMainForm.TCPcomConnect(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPcom connected');
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
mes : AnsiString;
begin
mes := ...
ListBox1.Items.Add('sending : ' + mes);
TCPcom.SendMessage(mes);
end;
procedure TMainForm.TCPcomDisconnect(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPcom: disconnect');
end;
procedure TMainForm.TCPcomError(const msg: string; aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPcomError: ' + msg);
end;
procedure TMainForm.TCPcomReceive(aSocket: TLSocket);
var
buff: string;
recv: integer;
hor: integer;
vert: integer;
begin
recv := aSocket.GetMessage(buff);
ListBox1.Items.Add('received ' + IntToStr(recv) + ' bytes: ' + buff);
SScanf(buff,'[PH:%d PV:%d]',[@hor,@vert]);
vertSkutPoz.Position:=vert;
horSkutPoz.Position:=hor;
end;
procedure TMainForm.TCPSock1Accept(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPSock: connection accepted on server');
end;
procedure TMainForm.TCPSockAccept(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPSock: connection accepted on server');
end;
procedure TMainForm.TCPSockConnect(aSocket: TLSocket);
begin
StatusBar.SimpleText := 'sending request...';
aSocket.SendMessage('GET /?action=stream' + #10+ #10);
end;
procedure TMainForm.TCPSockDisconnect(aSocket: TLSocket);
begin
ListBox1.Items.Add('TCPSock: disconnect');
end;
procedure TMainForm.TCPSockError(const msg: string; aSocket: TLSocket);
begin
StatusBar.SimpleText := 'connect failed';
ListBox1.Items.Add('TCPSock error: ' + msg);
end;
procedure TMainForm.TCPSockReceive(aSocket: TLSocket);
var
res, i, j : Integer;
begin
res := aSocket.Get( buffer[0], sizeof(buffer) );
if res = 0 then exit;
.....
......
.....
end;