|
고영문 님이 쓰신 글 :
: 홍지곤 님이 쓰신 글 :
: : 고영문 님이 쓰신 글 :
: : : 타이머로 계속해서 클라이언트로 값을 보내는데 클라이언트를 죽이면 인덱스 에러가 나오네요. 아마두 클라
: : :
: : : 이언트가 죽었을때 보내지 말라는 명령을 해야 할거 같은데 어떻게 클라이언트가 죽는걸 알수 있죠?
: : :
: : :
: : : *****Server*******
: : : __fastcall TForm1::TForm1(TComponent* Owner)
: : : : TForm(Owner)
: : : {
: : : temp=0;
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
: : : TCustomWinSocket *Socket)
: : : {
: : : receivePacket = Socket->ReceiveText();
: : : Edit2->Text = receivePacket;
: : : Socket->SendText(Edit2->Text);
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : : Timer1->Enabled = true;
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : : {
: : : temp++; // Time Interval = 200;
: : : Edit1->Text = temp;//sendPacket;
: : : ServerSocket1->Socket->Connections[0]->SendText(temp);//sendPacket);
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : :
: : : *********Client*****************
: : : void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
: : : TCustomWinSocket *Socket)
: : : {
: : : AnsiString str1;
: : : str1 = Socket->ReceiveText();
: : :
: : : Edit2->Text = str1;
: : : }
: : :
: :
: : //-------------------------------------------------------------------------------
: : 안녕하세요! Magic.홍지곤 입니다.
: :
: : 그냥 참고만 하세요!
: :
: : Clinet 를 죽일때 Server쪽으로 죽었다는 Packet을 날리면 될 것 같은데요..
: :
: : Server쪽에서는 이 Packet을 받아 Clinet쪽으로 보내지 않으면 될 것 같습니다.
: :
: : 정상적으로 Client를 죽였을때 입니다.
: :
: : Client에서 Server야 나죽었다 이러면 Server에서는 너 죽었냐..그럼 데이터 보내지
: :
: : 않을께....이런식이 아닐까 생각합니다..
: :
: : 강제로 Clinet를 죽였을시에는 Server쪽에서 일정시간이나 머 이런것으로 Clinet가
: :
: : 죽었는지 죽지 않았는지 체크하는 수밖에는 없을 것 같구요.. 이건 제 생각이니
: :
: : 참고만 하세여~~
: :
: : 아참! 위에 소스를 잠깐 보니까 일반 소켓 컴포넌트를 이용한 것 같은데..
: :
: : 이걸로 하면 소켓 에러쪽에서 체크 할 수 있는 것 아닌가요?
: :
: : 조금이라도 도움이 되었으면 하네요^^*
: :
: : 초보라서 답변하기 좀 그러네여~~~
: :
: : 그럼..즐프하세요~
:
:
: 넵..감솨함다..님의 충고로 아래와 같이 고쳤더니 그런 에러는 없어졌습니다. 정말 감사함니다.
: 그런데 가끔씩 또다른 에러가 나오네요.
: 그 에러가 모냐면..
:
: ESocketError with message 'Asynchronous socket error 10053'
:
: 원인으로는 아마도
:
: 서버에서 클라이언트로 데이터를 1초마다 100개씩 보낸다고 했을때 클라이언트가 그것을
:
: 다 받기 전에 접속을 끊었을때 나는 에러가 아닐까요???ㅠ.ㅠ
:
: 해결방법이 모가 있을까요???
:
//-----------------------------------------------------------------------------------
MSDN에서 가지고 온 내용입니다.
WSAECONNABORTED (10053)
Software caused connection abort.
An established connection was aborted by the software in your host machine, possibly due to a data transmission time-out or protocol error.
고영문님이 생각하시는 것과 같은 내용인 것 같습니다. 서버쪽의 데이터가 계속 보내고 있는 중에
클라이언트쪽에서 접속 연결을 끊었을때 발생하는 에러인 것 같습니다.
그럼.
|