C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[10322] [질문]UDP사용시
공부중 [hurco] 1577 읽음    2001-08-27 17:19
TCP를 사용하지 않고 UDP를 사용하여 데이타를 주고 받으려고 합니다.

프로그램이 가동될때

  char tempBuff[60];
  static int rThread = 0;
  SOCKADDR_IN localsin;
  GlobalSocket = socket(AF_INET, SOCK_DGRAM, 0);
  if(GlobalSocket == INVALID_SOCKET)
  {
     Memo1->Lines->Add("소켓실패");
     closesocket(GlobalSocket);
     return;
  }

  localsin.sin_family = AF_INET;
  localsin.sin_addr.s_addr = INADDR_ANY;
  localsin.sin_port = htons(2000);

  if(bind(GlobalSocket,(SOCKADDR *)&localsin, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
  {
     wsprintf(tempBuff,"연결실패:%d",WSAGetLastError());
     Memo1->Lines->Add(tempBuff);
     return;
  }
  _beginthread(RecvThread, 0, &rThread);

소켓을 열고 상대PC로 데이타를 보낼때 상대편에서 받을 준비가 안되어 있으면
원속에러 10054가 발생합니다. 에러값 : 10054 - The connection is reset by remote side

메시지를 보낼때 상대PC가 받을 준비가 되어있지 않거나 PC가 꺼져 있는 경우입니다.
메시지가 받을 준비가 되어있는 PC에서는 데이타가 제대로 수신됩니다.
그런데 제PC에서 원속에러가 발생된 후에는 다른 PC에서 제PC로 보낸 데이타를 받지 못합니다.
위와 같은 소켓에러가 발생된 후에는 리시브하는 쓰레드가 종료되는 것같습니다.

보내는 메시지는
           if( sendto(GlobalSocket, tempBuff,sizeof(tempBuff),(int)NULL,
              (SOCKADDR *)&remote_sockaddr_in,sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
           {

              wsprintf(tempBuff,"보내기 실패:%d",WSAGetLastError());
              Form1->Memo1->Lines->Add(tempBuff);
              return;
           }

위에서 메시지를 보낼때 메시지를 받을 수 없을 때에도 받을 수 있는 PC로만 전송되고
제 PC에서도 다른 곳에서 보내는 메시지를 받으려면 어떻게 해야 하나요.
현재는 소켓에러가 나도 제PC에서 보내는 데이타를 받을 준비가 되어있는 PC에서는 수신이
가능합니다.
위에 보낼때 소켓에러가 발생했을때 리셋시키고 다시 받을 수있는 루틴이 추가되어야 할것같은데
아시는 분 수정해 주시면 감사하겠습니다.

+ -

관련 글 리스트
10322 [질문]UDP사용시 공부중 1577 2001/08/27
10327     Re:[질문]UDP사용시 최보현.U&I 1417 2001/08/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.