#include "GV.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
SetMainWindowText( "サーバー" ) ;
char StrBuf[MAX_CONNECT_NUM][ 256 ] ; // データバッファ
int NetHandle[MAX_CONNECT_NUM],LostHandle[MAX_CONNECT_NUM]; // ネットワークハンドル
int DataLength[MAX_CONNECT_NUM]; ; // 受信データ量保存用変数
IPDATA Ip[MAX_CONNECT_NUM] ; // 接続先IPアドレスデータ
int Num,Flag;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 接続してくるのを待つ状態にする
PreparationListenNetWork( 10000 ) ;
//初期化
for(int i=0;i<MAX_CONNECT_NUM;i++){
strcpy( StrBuf[i], "" ) ;
NetHandle[i] = -1 ;
}
//ESCキーが押されるまでループ
while( !ProcessMessage() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 &&ClearDrawScreen()==0)
{
//接続が切れてるかチェック
for(int i=0;i<MAX_CONNECT_NUM;i++){
LostHandle[i]=GetLostNetWork();
if(LostHandle[i]==NetHandle[i])NetHandle[i]=-1;
}
//配列番号を決める
for(int i=0;i<MAX_CONNECT_NUM;i++){
if(NetHandle[i]==-1){
Num=i;
Flag=0;
break;
}else{
Flag=1;
}
}
//接続人数限界以上じゃなかったらつなげる
if(Flag != 1)
NetHandle[Num] = GetNewAcceptNetWork();
//ip保存
GetNetWorkIP(NetHandle[Num] , &Ip[Num]) ;
int y=0;
//接続者の名前を表示
for(int i=0;i<MAX_CONNECT_NUM;i++){
//データを受信してる
if( GetNetWorkDataLength( NetHandle[i] ) != 0 ){
// データ受信
DataLength[i] = GetNetWorkDataLength( NetHandle[i] ) ; // データの量を取得
NetWorkRecv( NetHandle[i] , StrBuf[i] , DataLength[i] ); // データをバッファに取得
}else{
}
if(NetHandle[i]!=-1){
// 受信したデータを描画
DrawFormatString( 0, y,GetColor( 255 , 255 , 255 ), "接続中 IP:%d.%d.%d.%d 名前:%s "
,Ip[i].d1,Ip[i].d2,Ip[i].d3,Ip[i].d4 ,StrBuf[i] ) ;
y+=FONT_SIZE;
// 受信成功のデータを送信
NetWorkSend( NetHandle[i] , "接続成功" , 9 ) ;
}
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
自分なりに複数人接続できる事を目指してコードを書いてみましたが
うまくいきません。
PreparationListenNetWorkを使って接続受付中状態で他の処理を行うことはできますか?
またループの度にGetNewAcceptNetWork();を行うのはダメですか?