TTCP에 대한 질문입니다.
TTCP를 사용하다 발견한 내용인데요,
TTCP.State = sckClosed인데도
DOS창에서 netstat -a로 확인하면 아직 connection을 끊지 못한 상태로 남아 있습니다.
한동안 남아 있다가(약 1~2분) 사라집니다. C++에서는 쉽게 된다고 그러는데
Visual Basic, Delphi에서는 잘 안됩니다.
그래서그런지 아래의 Button1Click을 콜하면 메세지박스에
"exception class EOleException with Message 'Address in use'."라고
나타납니다.
분명 TCP1.State가 sckClosed를 확인 했는데도요...
두번째 질문, Socket을 연결하고 끊는데 얼마나 긴 시간이 요구되는지요.
TTCP.State를 보면 sckClosing,sckConnecting 이 있어서요.
시간이 걸려서그런지 하나의 버튼으로 TCP.Close/TCP.Connect를 못하는 것 같습니다
또한 TCP.Connect후 곧바로 TCP.SendData를 수행하면 안돼요.
일부러 sleep(6000)까지 주어 보았지만 sckConnected 상태는 아니더군요.
하지만 아래의
제가 사용했던 소스는 다음과 같습니다.
Memo1KeyDown Procedure로 실행하면 잘 됩니다.
Memo1에 놓일 때는 이미 TCP1.Connected로 변해 있기 때문인데 왜 한꺼번에
처리를 못하는지요..
어떻게 하면 Button1Click에 있는 Comment를 풀어도 실행할 수 있는지요.
델도사님들의 훌륭한 조언을 부탁드립니다.
procedure TSocketTestForm.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('TCP1.State = ' + IntToStr(TCP1.State));
if TCP1.State <> sckClosed then
begin
TCP1.Close;
end;
if InputQuery('Computer to connect to', 'IP Address :', Server) then
if (Length(Server) > 0) then
begin
TCP1.Connect(Server,1124);
// Sleep(6000); // Connect Time을 위한 시간설정
// if TCP1.State = sckConnected then
// TCP1.SendData('STAT10123456789') // 이렇게하면 절대 보내지 못함
// else
// ShowMessage('Not Connected'); // 이 메세지 박스만 뜨게됩니다.
end;
end;
procedure TSocketTestForm.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_Return then
TCP1.SendData(Memo1.Lines[Memo1.Lines.Count - 1]);
end;
|