デバッグして追跡しても分かりませんでした。
Crient側
#include "DxLib.h"
#include "string"
using namespace std;
string flag="OK";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
SetDoubleStartValidFlag(TRUE);
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
IPDATA IP;
IP.d1 = 127;
IP.d2 = 0;
IP.d3 = 0;
IP.d4 = 1;
int n_count = 0;
int NetHandle;
while(ProcessMessage() == 0)
{
n_count++;
//通信を確立
NetHandle = ConnectNetWork( IP, 9850 );
//count_sが5になったら強制終了
if(n_count == 5){
DrawString( 0, 0, "接続失敗", GetColor( 255 , 255 , 255 ) );
ScreenFlip();
DxLib_End();
return -1;
}
string Ver = "0.0";
// 確立が成功した場合のみ中の処理をする
if( NetHandle != -1 )
{
int StrLength = sizeof( Ver ) + 1;
//データ送信
NetWorkSend( NetHandle, &Ver, StrLength);
break;
} else {
DrawString( 0, 0, "接続失敗", GetColor( 255 , 255 , 255 ) );
ScreenFlip();
DxLib_End();
return -1;
}
}
string StrBuf;
int DataLength;
//データがくるのを待つ
while( !ProcessMessage() )
{
//取得していない受信データ量を得る
DataLength = GetNetWorkDataLength( NetHandle ) ;
//取得してない受信データ量が0じゃない場合はループを抜ける
if( DataLength != 0 ) break ;
}
//データ受信
NetWorkRecv( NetHandle , &StrBuf, DataLength );
DrawString( 0, 0, StrBuf.c_str(), GetColor(0,0,0) );
if(strcmp( StrBuf.c_str(), flag.c_str() ) == 0 )
{
//接続を断つ
CloseNetWork( NetHandle );
goto Login;
} else {
//接続を断つ
CloseNetWork( NetHandle );
goto UpDate;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
UpDate:;
//アップデートサーバーに接続
{
DxLib_End();
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Login:;
DxLib_End();
return 0;
}
#include "コモン.h"
#include "変数.h"
//バージョン
string ver = "0.0";
string Message;
///////////////////////////////////////////
//ネットワークハンドル
int NetHandle = -1, LostHandle;
//接続先IPアドレスデータ
IPDATA Ip;
//受信データ量保存用変数
int DataLength;
//受信データバッファ
string StrBuf;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetDoubleStartValidFlag(TRUE);
// ウインドウモード
ChangeWindowMode( TRUE );
//DXライブラリ初期化
if( DxLib_Init() == -1 ) return -1;
//接続してくるのを待つ状態にする
PreparationListenNetWork( 9850 );
//接続してくるかESCキーが押されるまでループ
while( !ProcessMessage() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
//新しい接続があったらそのネットワークハンドルを得る
NetHandle = GetNewAcceptNetWork();
if( NetHandle != -1 ) break;
}
//接続されていたら次に進む
if( NetHandle != -1 )
{
//接続の受付を終了
StopListenNetWork();
//接続してきたマシンのIPアドレスを得る
GetNetWorkIP( NetHandle , &Ip );
//データが送られて来るまで待つ
while( !ProcessMessage() )
{
//取得していない受信データ量が0以外のときはループから抜ける
if( GetNetWorkDataLength( NetHandle ) != 0 ) break;
}
//データ受信
DataLength = GetNetWorkDataLength( NetHandle );//データの量を取得
NetWorkRecv( NetHandle , &StrBuf, DataLength ); //データをバッファに取得
//受信したデータを描画
DrawString( 0 , 0 , StrBuf.c_str(), GetColor( 255 , 255 , 255 ) );
if(strcmp( StrBuf.c_str(), ver.c_str() ) == 0)
{
Message = "OK" ;
//受信成功のデータを送信
NetWorkSend( NetHandle , &Message, 3);
} else {
Message = "NO";
//受信失敗のデータを送信
NetWorkSend( NetHandle , &Message , 3);
}
DrawString( 0 , 20 , Message.c_str(), GetColor( 255 , 255 , 255 ) );
//相手が通信を切断するまで待つ
while( !ProcessMessage() )
{
//新たに切断されたネットワークハンドルを得る
LostHandle = GetLostNetWork();
//切断された接続が今まで通信してた相手だった場合ループを抜ける
if( LostHandle == NetHandle ) break;
}
//切断確認表示
DrawString( 0, 16, "切断しました", GetColor( 255 , 255 , 255 ) );
// キー入力待ち
WaitKey();
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
SAO-Client.exe の 0x0136e312 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x3573665b を読み込み中にアクセス違反が発生しました。
エラーの出る場所
DxLib_End();
の後のreturnが終了した後
VC++2010EEを使用しています