トップページ > 記事閲覧
UDPでの通信について…
名前:Kada 日時: 2013/12/22 23:24

(int NetHandle=MakeUDPSocket(777);//UDP) //////////////////通信待機///////////////////// while(1){ //受信待ち ProcessMessage(); GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_F2]==1){ DxLib_End(); return 0; } if(CheckNetWorkRecvUDP(NetHandle)==TRUE) break; } NetWorkRecvUDP(NetHandle,&Ip,NULL,&start,16,TRUE); NetWorkSendUDP( NetHandle, Ip, 777, &start , 16 ) ; while(1){//ゲーム開始 //data送信 while(1){ if(NetWorkSendUDP( NetHandle , Ip , 777 , mikata , 160 ) >=0) break; } //data受信 while(1){ ProcessMessage(); if(CheckNetWorkRecvUDP(NetHandle)==TRUE) break; GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_F2]==1){ DxLib_End(); return 0; } } NetWorkRecvUDP(NetHandle,&Ip,NULL,tekidata,160,TRUE); NetWorkSendUDP( NetHandle , Ip , 777 , &start2 , 16 ); } /////////////////////////////送信側//////////////////////// //送信 NetWorkSendUDP( NetHandle , Ip , 777 , &start2 , 16 ); //受信 while(1){ ProcessMessage(); if(CheckNetWorkRecvUDP(NetHandle)==TRUE) break; GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_F2]==1){ DxLib_End(); return 0; } } } NetWorkRecvUDP(NetHandle,&Ip,NULL,&start2,16,TRUE); //受信 while(1){//ゲーム開始 //data受信 while(1){ ProcessMessage(); if(CheckNetWorkRecvUDP(NetHandle)==TRUE) { break; } GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_F2]==1){ DxLib_End(); return 0; } } NetWorkRecvUDP(NetHandle,&Ip,NULL,tekidata,160,TRUE); //data送信 NetWorkSendUDP( NetHandle , Ip , 777 , mikata , 160 ) ; } DxLibrary,UDP通信プログラムを作成中です 通信部だけを書いています ゲームスタートのパケットを受信すると返し、通信大戦が始まります で、ゲーム開始のパケットは受け取ってゲームが開始されるのですが、肝心のキーボードの入力データが相手に送信されていません 双方ともです 原因が分かりません あと、プログラムを終了時エラーが出ます
メンテ

Page: 1 |

Re: UDPでの通信について… ( No.1 )
名前:管理人 日時:2013/12/22 23:36

キーボードの入力データを相手に送信しているところはプログラム中のどちらでしょうか?
メンテ
Re: UDPでの通信について… ( No.2 )
名前:Kada 日時:2013/12/22 23:48

両方送信しています そして、その後、双方で処理を行います 後、どちらかがプログラムを閉じても、もう一方のゲームは進行し続けます どこに原因があるのか見当もつきません…
メンテ
Re: UDPでの通信について… ( No.3 )
名前:管理人 日時:2013/12/22 23:58

掲載して頂いたプログラムの中にはキーボードの入力データを相手に送信している部分は無いのでしょうか?
メンテ
Re: UDPでの通信について… ( No.4 )
名前:Kada 日時:2013/12/23 09:33

GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_RIGHT]==1){ mikata[0]=1; }else{ mikata[0]=0; } if(Buf[KEY_INPUT_LEFT]==1){ mikata[1]=1; }else{ mikata[1]=0; } if(Buf[KEY_INPUT_UP]==1){ mikata[2]=1; }else{ mikata[2]=0; } if(Buf[KEY_INPUT_RETURN]==1){ mikata[3]=1; }else{ mikata[3]=0; } if(Buf[KEY_INPUT_D]==1){ mikata[4]=1; }else{ mikata[4]=0; } if(Buf[KEY_INPUT_M]==1){ mikata[5]=1; }else{ mikata[5]=0; } if(Buf[KEY_INPUT_DOWN]==1){ mikata[6]=1; }else{ mikata[6]=0; } if(Buf[KEY_INPUT_B]==1){ mikata[7]=1; }else{ mikata[7]=0; } if(Buf[KEY_INPUT_C]==1){ mikata[8]=1; }else{ mikata[8]=0; } if(Buf[KEY_INPUT_K]==1){ mikata[9]=1; }else{ mikata[9]=0; } //data送信 while(1){ if(NetWorkSendUDP( NetHandle , Ip , 777 , mikata , 160 ) >=0) break; } 実際はこんな感じです Buf自体を送ると容量が500bitを超えると思って… 色々説明不足で申し訳ありません 最初、一方が待機し、もう一方がスタートの合図を送ります すると、もう一方に合図を返し通信が確立した事を表します それが、 while(1){ ProcessMessage(); if(CheckNetWorkRecvUDP(NetHandle)==TRUE) break; GetHitKeyStateAll(Buf); if(Buf[KEY_INPUT_F2]==1){ DxLib_End(); return 0; } } } なんですが、通信相手がいない時でも無限ループを通り抜けてしまいます ゲームのループ内でも同じような処理を行ってるのですが、相手に正常に届きません
メンテ
Re: UDPでの通信について… ( No.5 )
名前:管理人 日時:2013/12/23 10:29

通信相手が居ないときでも無限ループを抜けてしまうのは謎です 今気が付いたのですが、載せて頂いたプログラムの中の全ての NetWorkRecvUDP 呼び出しで 引数 Peek が常に TRUE になっています こちらを TRUE にするとバッファから受信したデータがずっと残り続けるので、 一度でもデータを受信すると以降 CheckNetWorkRecvUDP は必ず TRUE を返し、 NetWorkRecvUDP が返すデータも常に最初に受信したデータとなってしまいます 受信したデータをバッファから削除する場合は Peek を FALSE にする必要が ありますので、それが原因かは分かりませんが、よろしければ確認してみてください
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存