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
[40561] Re:Re:Re:답변 감사합니다. ( NonBlocking mode으로 어떻게 바꿔야 할지?)
evergreen [heredity] 1397 읽음    2005-06-14 19:22
Socket 통신은 기본 지식 + 경험이 상당히 많이 필요한 분야(?)입니다.
잘 되리라 생각하고 수 년을 사용하던 프로그램도 면밀히 검토해 보면 일부 Packet를
유실하게 작성했다거나 또는 예외처리(특히 끊김 처리)에 문제가 있다거나 등등.

님의 경우처럼 수 주일을 소비해서 디버깅 하셔야 할 상황이면 시간을 투자해서
Socket에 대한 공부를 조금 더 하시는 것이 더 좋을것 같습니다(아님 이전에 말씀 드렸던 Component를 사용할
것을 심각히(?) 고려해 보세요).  --;

아래 URL은 WSAAsyncSelect에 대한 함수 설명입니다. 참조하세요.
  http://crab.chungbuk.ac.kr/%7Ejchern/WSAAsyncSelect.html
즐~


초보자 님이 쓰신 글 :
: 답변 정말로 감사드리구요.
: 자꾸 귀찮게 해드려 죄송합니다.
:
: log 저장부분은 소스에 추가 했습니다.  (세심하게 소스까지 올려주셔서 감사드립니다.)
:
: 의문이 connect가 blocking mode 라도 처음에만 연결시도하고  그 이후에는 하지 않거든요.
: (재연결부분은 막았습니다.)  그런데도 나중에 "응답없음" 이 나올수 있는지요?
:
: 그리고 Conncet 부분을 Nonbloking mode 로 어떻게 바꿔야 하는지요? 
: 아래처럼 전에 했었는데 실제로 연결이 안되어 있는데 연결로 표시되어서  지금처럼 바꾸었습니다.
: 아래 소스도 Blocking mode 인가요? (잘못된 부분은 있는지요?)
:
:
: int cSockUtil::connect_sock(char *szipaddr, int nport, int n)
: {
:     int nret;
:     String  str;
:
:     if(cli_conn > MAX_CLIENT) // MAX_CLIENT 최대 장비수
:         return 1;
:
:     cli[n].cli_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
:
:     cli[n].cli_addr.sin_family = AF_INET;
:     cli[n].cli_addr.sin_addr.s_addr = inet_addr(szipaddr);
:     cli[n].cli_addr.sin_port = htons(nport);
:
:     nret = WSAAsyncSelect(cli[n].cli_sock, frmMain->Handle, NULL, FD_CONNECT);
:     if(nret == SOCKET_ERROR)
:         return -1;
:
: if((nret = connect(cli[n].cli_sock, (LPSOCKADDR)&cli[n].cli_addr, sizeof(cli[n].cli_addr))) == SOCKET_ERROR )
:     {
:           if((nret = WSAGetLastError()) == WSAEWOULDBLOCK)
:         {
:             cli[0].in_use = S_YES;
:             tbuff.set_clilog(); // listview에 연결상태 보여주는 함수.
:         }
:         else
:             return -1;
:     }
:
:     return cli[n].cli_sock;
: }
: //---------------------------------------------------------------------------
:
:
:
:
: evergreen 님이 쓰신 글 :
: : heredity입니다. 질문하신 내용을 보고 몇 자 적습니다.
: :
: : 1. Socket API를 직접 사용하셨는데, TClientSocket, TServerSocket 또는 Indy를 사용해 보심이 어떨런지요.
: :    이 Comp.들은 상당히 잘 만들어져 있습니다.
: :
: : 2. NonBlocking mode를 사용하셨다는데, 님의 Source중 connect() 부분은 Blocking 모드인 것 같습니다.
: :    만약 Blocking 모드를 사용하셨다면 기기와 연결되지 않으면 당근 프로그래밍 멈춰 있겠죠!
: :
: : 3. void cSockUtil::read_sock() {
: :        :
: :      m_clksaved[i] = clock();           // 이 부분을 당근 넣으 셨겠죠 ?
: :        :
: :    }
: :
: : 4. Log에 대하여 추가로 말씀 드리면 Log를 남길때 메시지를 저장한 후 File을 닫으면 App.가 죽어도 Log는
: :    남아 있게 됩니다.  아래 간단한 Log 함수를 남기오니 참조하세요.
: :
: :      #include <stdio.h>
: :
: :      //---------------------------------------------------------------------------
: :      void __fastcall Log( AnsiString asMsg, bool bClear )
: :      {
: :        TDateTime  dt      = TDateTime::CurrentDateTime();
: :        AnsiString asFile  = dt.FormatString( "YYYYMMDD" ) + ".TXT";
: :        AnsiString asTime  = dt.FormatString( "HHNNSS" );
: :        PCHAR      pchFile = asFile.c_str();
: :        FILE       *pfp;
: :
: :        if( bClear ) {
: :          if( FileExists( pchFile ) ) {
: :            DeleteFile( pchFile );
: :          }
: :        }
: :
: :        pfp = fopen( pchFile, "a+" );
: :
: :        if( pfp != NULL ) {
: :          fprintf( pfp, "%s\n", (asTime + "> " + asMsg).c_str() );
: :          fclose( pfp );
: :        }
: :      }
: :
: : 즐~

+ -

관련 글 리스트
40513 [질문] 응답없음 (제발 꼭 봐주세요.) 초보자 1198 2005/06/11
40553     Re:[질문] 응답없음 (제발 꼭 봐주세요.) evergreen 1334 2005/06/14
40554         Re:Re:답변 감사합니다. ( NonBlocking mode으로 어떻게 바꿔야 할지?) 초보자 1318 2005/06/14
40561             Re:Re:Re:답변 감사합니다. ( NonBlocking mode으로 어떻게 바꿔야 할지?) evergreen 1397 2005/06/14
40573                 Re:Re:Re:Re:감사합니다. 초보자 995 2005/06/15
40547     Re:[질문] 응답없음 (제발 꼭 봐주세요.) evergreen 1105 2005/06/14
40549         Re:Re: 답변 감사하구요. (아래 내용 한번 봐주실래요.) 초보자 921 2005/06/14
40515     Re:[질문] 응답없음 (제발 꼭 봐주세요.) 이성제 949 2005/06/12
40516         Re:Re:[질문] 소켓을 2개 동시에 오픈했다는 의미가 ? 초보자 967 2005/06/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.