一つのプログラムで送信と受信を行うという発想はありませんでした
原因ですが、送信に使用したハンドルで送信したデータを受信することはできません、
確かに一つのPC内でデータを送受信しているので送信に使用したハンドルを
GetNetWorkDataLength で調べれば送信したデータを受け取れるような気がしますが、
プログラムはあくまで自己とは別の相手にデータを送信したつもりになっていますので、
受信用のハンドルを GetNewAcceptNetWork で取得して、そのハンドルで受信する必要があります
ニャンさんが組まれたプログラムを恐らくニャンさんの意図動作するようにしてみましたので、
よろしければご覧になってみてください
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1 ; // エラーが起きたら直ちに終了
}
char StrBuf[ 256 ] ;
char *tuusinn1="あい";
int count=0;
int Cr=GetColor( 255, 255, 255 ) ;
IPDATA Ip1 ;
Ip1.d1 = ○ ;
Ip1.d2 = ○ ;
Ip1.d3 = ○ ;
Ip1.d4 = ○ ;
int NetHandle1=0;
int NetHandle2=0;
int DataLength=0;
// 接続してくるのを待つ状態にする
PreparationListenNetWork(10001) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// ウインドウが閉じられるかESCキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
ClearDrawScreen() ;
// 送信用ハンドルで接続を確立していなかったら接続
if( NetHandle1 == 0 )
{
// 接続
NetHandle1 = ConnectNetWork( Ip1, 10001 ) ;
}
// 文字列送信
NetWorkSend( NetHandle1, tuusinn1, 5 ) ;
// 受信用ハンドルが確立していなかったら接続され待ち
if( NetHandle2 == 0 )
{
// 接続されるのを待つ
while( ProcessMessage() == 0 )
{
// 受信用ハンドルの取得
NetHandle2 = GetNewAcceptNetWork() ;
if( NetHandle2 != -1 ) break ;
}
}
// データがくるのを待つ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 取得していない受信データ量を得る
DataLength = GetNetWorkDataLength( NetHandle2 ) ;
// 取得してない受信データ量が0じゃない場合はループを抜ける
if( DataLength != 0 ) break ;
}
// 受信
NetWorkRecv( NetHandle2, StrBuf, 5 ) ;
// 受信した文字列とネットハンドルと受信したデータ長と送受信の回数を描画
DrawFormatString( 0, 0, Cr, "受信文字列:%s", StrBuf ) ;
DrawFormatString( 0, 16, Cr, "送信用ネットハンドル:%d", NetHandle1 ) ;
DrawFormatString( 0, 32, Cr, "受信用ネットハンドル:%d", NetHandle2 ) ;
DrawFormatString( 0, 48, Cr, "受信データ長:%d", DataLength ) ;
DrawFormatString( 0, 64, Cr, "送受信の回数:%d", count ) ;
// 送受信の回数をインクリメント
count ++ ;
ScreenFlip();
}
return 0;
}