WinSockでの通信プログラムがうまくいきません
WinSockでの通信プログラムがうまくいきません。
使用言語はC++とDirectXです。
ローカルでの通信(ルータを介したパソコン同士)はうまくいくんですが、別の場所にあるPCとの通信ができません。
以下実際に使用している関数です。
関数はマルチスレッドで動かしています。
WSADATA mWsaData;
SOCKET mSockYou,mSockI;
struct sockaddr_in mAddr;
struct sockaddr_in mServer;
struct sockaddr_in mClient;
void CNetwork::Init(){
int err = WSAStartup( MAKEWORD( 2, 0 ), &mWsaData );
if( err != 0 ){
ERROR_EXIT();
return;
}
//Socket初期化
mSockI = socket( AF_INET, SOCK_STREAM, 0 );
if( mSockI == INVALID_SOCKET ){
ERROR_EXIT();
return;
}
mPort = 0;
memset( mName, 0, sizeof( mName ) );
}
//Server側
void CNetwork::Accept(){
FILE* fp;
fopen_s( &fp, "messageLog.txt", "w" );
mAddr.sin_family = AF_INET;
mAddr.sin_port = htons( mPort );
mAddr.sin_addr.S_un.S_addr = INADDR_ANY;
if( bind( mSockI, (struct sockaddr *)&mAddr, sizeof( mAddr ) ) ) fprintf_s( fp, "bind失敗\n" );
if( listen( mSockI, 10 ) != 0 ) fprintf_s( fp, "listen失敗\n" );
int len = sizeof( mClient );
SOCKET t = accept( mSockI, (struct sockaddr*)&mClient, &len );
if( t == INVALID_SOCKET ) fprintf_s( fp, "Accept失敗\n" );
mSockYou = t;
fprintf_s( fp, "Accept終了\n" );
fclose( fp );
}
void CNetwork::Connect(){
FILE* fp;
fopen_s( &fp, "messageLog.txt", "a" );
fprintf_s( fp, "Connect開始\n" );
//ソケットの設定
mServer.sin_family = AF_INET;
mServer.sin_port = htons( mPort );
mServer.sin_addr.S_un.S_addr = inet_addr( mName );
if (mServer.sin_addr.S_un.S_addr == 0xffffffff) {
fprintf_s( fp, "hostbynameへ\n" );
struct hostent *host;
host = gethostbyname( mName );
if ( host == NULL ) {
return false;
}
mServer.sin_addr.S_un.S_addr = *(unsigned int *)host->h_addr_list[0];
}
fprintf_s( fp, "Socketの設定完了\n" );
while( true ){
fprintf_s( fp, "connect()開始\n" );
if( connect( mSockI, (struct sockaddr *)&mServer, sizeof( mServer ) ) == 0 ){
fprintf_s( fp, "Connect完了\n" );
break;
}
else{
fprintf_s( fp, "Connect失敗\n" );
Sleep(100);
}
}
fprintf_s( fp, "Connect終了\n" );
fclose(fp);
}
また、ログは下のように出ました。
//サーバ側
Accept失敗
//クライアント側
Connect開始
Socketの設定完了
connect()開始
Connect失敗
ご教授お願いします。
お礼
回答ありがとうございます。 調べてみます。