トップページ > 過去ログ > 記事閲覧
接続について
名前:ニャン 日時: 2009/12/15 13:09

下記のプログラムを実行するとConnectNetWork関数を使ったとき、自分と接続できていると表示される(戻り値が0以上)のですが、その後、NetWorkSendで自分に対して”あい”というデータを送り、NetWorkRecvで受信すると、データが存在しないことになってしまいます。GetNetWorkDataLengthの戻り値が-1になっています。 原因が分かる人がいたら、教えてもらえるとありがたいです。 //プログラム(○のところには、自分のIPアドレスを入れる) //スタート #include "DxLib.h" #include <direct.h> #include <math.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; SetDoubleStartValidFlag( TRUE ) ; SetAlwaysRunFlag(TRUE ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } char StrBuf[ 256 ] ; int a=0; int b=0; char *tuusinn1="あい"; char *tuusinn2="うえ"; char *tuusinnz1="45"; char *tuusinnz2="54"; char count=0; int Cr=GetColor( 126 ,126 , 126) ; IPDATA Ip1 ; Ip1.d1 = ○ ; Ip1.d2 = ○ ; Ip1.d3 = ○ ; Ip1.d4 = ○ ; IPDATA Ip2 ; Ip2.d1 = ○ ; Ip2.d2 = ○ ; Ip2.d3 = ○ ; Ip2.d4 = ○; int NetHandle1=0; int NetHandle2=0; int NetHandle=0; int DataLength=0; // 接続してくるのを待つ状態にする PreparationListenNetWork(10001) ; while (CheckHitKey( KEY_INPUT_ESCAPE ) == 0) { ClearDrawScreen() ; if(NetHandle1==0){ NetHandle1 = ConnectNetWork( Ip1,10001 ) ; } NetWorkSend( NetHandle1, tuusinn1, 10 ) ; // データがくるのを待つ while( !ProcessMessage()&& CheckHitKey( KEY_INPUT_ESCAPE ) == 0) { // 取得していない受信データ量を得る DataLength = GetNetWorkDataLength( NetHandle ) ; // 取得してない受信データ量が0じゃない場合はループを抜ける if( DataLength != 0 ) break ; } NetWorkRecv( NetHandle1, tuusinnz1,10) ; DrawFormatString( 150, 150, Cr, "%s ", tuusinn1 ) ; DrawFormatString( 250, 300, Cr, "%d ", NetHandle1 ) ; DrawFormatString( 350, 300, Cr, "%d ",DataLength ) ; DrawString( 0 , 0 , tuusinnz1, GetColor( 255 , 255 , 255 ) ) ; ScreenFlip(); count++; } return 0; }

Page: 1 |

Re: 接続について ( No.1 )
名前:いっち 日時:2009/12/15 14:39

ちらっと見ただけなのですが、 DataLength = GetNetWorkDataLength( NetHandle ) ; は DataLength = GetNetWorkDataLength( NetHandle1 ) ; が正しいのではないでしょうか?
Re: 接続について ( No.2 )
名前:管理人 日時:2009/12/19 01:45

一つのプログラムで送信と受信を行うという発想はありませんでした 原因ですが、送信に使用したハンドルで送信したデータを受信することはできません、 確かに一つの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; }

Page: 1 |