[DXライブラリ]通信の方法?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たなかたろう

[DXライブラリ]通信の方法?

#1

投稿記事 by たなかたろう » 11年前

通信方法としてDXライブラリのUDP通信の関数(http://homepage2.nifty.com/natupaji/DxL ... html#R13N1)を使用し、今通信ゲームを作っています。

コード:

nethandle=MakeUDPSocket(9850);

IPDATA Ip;	//相手のIPアドレス(一例です)
Ip.d1=1;
Ip.d2=1;
Ip.d3=1;
Ip.d4=1;

while( ProcessMessage() == 0 )		//待ち受け画面
{	
	// 画面をクリア
	ClearDrawScreen() ;
	
	if(CheckHitKey( KEY_INPUT_RETURN )==1)k=1;
	
 	if(k==0)
        {
		DrawFormatString(0,0,GetColor(255,255,255), "PRESS ENTER KEY") ;
		DrawFormatString(0,50,GetColor(255,255,255), "矢印キーで移動、スペースキーで弾発射") ;
		DrawFormatString(0,100,GetColor(255,255,255), "*このゲームは二人用です") ;
	}
	
	if(k==1)
        {
		DrawFormatString(0,0,GetColor(255,255,255), "通信中……") ;
		NetWorkSendUDP( nethandle,Ip,9850,"OK",2);
	}
	
	ScreenFlip();
	if(k==1 && CheckNetWorkRecvUDP(nethandle)==TRUE)break;  
}
これを送信側受信側ともにコードに入れればどちらも準備完了になるまで待ち、ほぼ同じタイミングで
次に進めると思ったのですが、片方のパソコン(windows7,Visual C++2010)はずっと通信待ちになり、
もう一つのパソコン(windowsXP,Visual C++2008Express Edition)は全く通信待ちなしで進んでしまいます。

どうしてこのよう結果になるのかわからないので教えてください。

Poco
記事: 161
登録日時: 14年前

Re: [DXライブラリ]通信の方法?

#2

投稿記事 by Poco » 11年前

状況をもっと詳しく説明してください。
「ずっと通信待ち」は何をもってそうだと判断されましたか?
逆に「全く通信待ちなし」はどう判断されました?

"通信中……"が表示されている→通信待ちと判断した。
"通信中……"が表示されずにプログラムが終了した→通信待ちなしで進んだと判断した。
でしょうか?

たなかたろう

Re: [DXライブラリ]通信の方法?

#3

投稿記事 by たなかたろう » 11年前

Poco さんが書きました: 「ずっと通信待ち」は何をもってそうだと判断されましたか?
逆に「全く通信待ちなし」はどう判断されました?
もう片方のパソコンの同じソフトを起動さえしていないのにこちら側のパソコンのソフトが終了したら
「全く通信待ちなし」としています。

「ずっと通信待ち」はもう片方のパソコンのソフトが終了したのにも関わらずこちら側のパソコンが通信中と出たままになっていることを示しています。


実はこの関数の後のメインループでも通信をするので片方が通信待ちのループを抜けた後でももう片方は反応するはずなんですが……

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: [DXライブラリ]通信の方法?

#4

投稿記事 by ISLe » 11年前

たなかたろう さんが書きました:どうしてこのよう結果になるのかわからないので教えてください。
UDPは届くことを保証しないプロトコルなので届かないこともあります。

たなかたろう

Re: [DXライブラリ]通信の方法?

#5

投稿記事 by たなかたろう » 11年前

ISLe さんが書きました: UDPは届くことを保証しないプロトコルなので届かないこともあります。
このあとのループでも通信をし続けるので1回届かなくてもすぐに次のものが届いて進めると思います。

Poco
記事: 161
登録日時: 14年前

Re: [DXライブラリ]通信の方法?

#6

投稿記事 by Poco » 11年前

Win8上でポートを変えて試したのですが、私の環境では動いています。
ファイアウォール等の設定を見直した方が良いかと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る