char IP[30] = "127.0.0.1";
char PORT[10] = "1000";
void Connection(HWND hwnd)
{
WORD wVersionRequested;
WSADATA wsaData;
char * ip = "";
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD(2, 0);
int ConRes, ConRes2;
char Buffer [20] = "";
if (WSAStartup(wVersionRequested, &wsaData) == 0)
{
if((hostinfo = gethostbyname(IP)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}
InitWSA();
begin:
Sleep(1000);
RemAdr.sin_family = AF_INET;
RemAdr.sin_addr.s_addr=inet_addr(127.0.0.2);
RemAdr.sin_port = htons (atoi(PORT));
client = socket (AF_INET,SOCK_STREAM,0);
switch(connect (client, (struct sockaddr *)&RemAdr,sizeof(RemAdr)))
{
case 0:
WSAAsyncSelect(client,hwnd,RATMSG_SOCKET,FD_READ|FD_CLOSE|FD_CONNECT);
return;
break;
default:
Sleep(1000);
RemAdr.sin_family = AF_INET;
RemAdr.sin_addr.s_addr=inet_addr(ip);
RemAdr.sin_port = htons (atoi(PORT));
client = socket (AF_INET,SOCK_STREAM,0);
ConRes2=connect (client, (struct sockaddr *)&RemAdr,sizeof(RemAdr));
break;
}
switch(ConRes2)
{
case 0:
WSAAsyncSelect(client,hwnd,RATMSG_SOCKET,FD_READ|FD_CLOSE|FD_CONNECT);
return;
break;
default:
goto begin;
break;
}
return;
}
接続に失敗して数時間後、ユーザーのインターネットは、アプリケーションを終了するまで、最終的に切断されます。問題であると想定されるのは?私のコードはちょっとうんざりだと思うので、参考になるヒントがあれば、覚えていて欲しい。ソケット接続をループすると、最終的にインターネット接続が切断されます。
これは私が実際には、最初のものが失敗した場合に接続するための "バックアップ" IPアドレスを持つ方法を作ることを試みていました。したがって、127.0.0.1に接続できない場合は、次に127.0.0.2を試し、次に127.0.0.1に戻ってexmapleを実行してください。それをどうすれば管理できますか?
P.S.私のコードで "悪い習慣"のように見えるものは何かを指摘してください。私は将来それを学び/修正することができます。ありがとう。
感謝の男:
編集は、より多くのこのような何かを試してみてください! + rep! – user1348950
いいえ、ループの外にいる必要があります。ループ内には 'connect()'だけが必要です。 –
onyl connectがループ内にある場合どのように私はそれが使用するipを変更するのですか? – user1348950