DxLib本家のリファレンスConnectNetWorkのサンプルコードに を付け加えて、IPを「127.0.0.1」にして通信プログラムをPC内で行いました。
これを発展させて
受信側は常に受信を行って複数受信を可能にし、送信側は送信が終わって"繋がったぞ~!!"を受信したら自動で切れるようにしたいのです。
送信側は単純にWaitKey()を無くせばいいだけなのですが、受信側が分かりません。
(注:今回は同時接続の可能性を考えず、一人が接続終了したら次の人が接続を試みるものとします)
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
char StrBuf[ 256 ] ; // データバッファ
int NetHandle , LostHandle ; // ネットワークハンドル
int DataLength ; // 受信データ量保存用変数
IPDATA Ip ; // 接続先IPアドレスデータ
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 接続してくるのを待つ状態にする
PreparationListenNetWork( 9850 ) ;
// 接続してくるかESCキーが押されるまでループ
NetHandle = -1 ;
while( !ProcessMessage() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 新しい接続があったらそのネットワークハンドルを得る
NetHandle = GetNewAcceptNetWork() ;
// 接続されていたら次に進む
if( NetHandle != -1 )
{
// 接続してきたマシンのIPアドレスを得る
GetNetWorkIP( NetHandle , &Ip ) ;
// データが送られて来るまで待つ
while( !ProcessMessage() )
{
// 取得していない受信データ量が0以外のときはループから抜ける
if( GetNetWorkDataLength( NetHandle ) != 0 ) break ;
}
// データ受信
DataLength = GetNetWorkDataLength( NetHandle ) ; // データの量を取得
NetWorkRecv( NetHandle , StrBuf , DataLength ); // データをバッファに取得
// 受信したデータを描画
DrawString( 0 , 0 , StrBuf , GetColor( 255 , 255 , 255 ) ) ;
// 受信成功のデータを送信
NetWorkSend( NetHandle , "繋がったぞ~!!" , 17 ) ;
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
変更点://接続の受付を終了する StopListenNetWork() ;を削除
ループ外のif( NetHandle != -1 )をループ内に入れた。
// 相手が通信を切断するまで待つのループを削除
これで、出来るかなと思いましたが一人目は接続可能ですが二人目以降は接続が確立されないようです。
どこを直したらいいか教えてください