|
답변 정말로 감사드리구요.
자꾸 귀찮게 해드려 죄송합니다.
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 );
: }
: }
:
: 즐~
|