ページ 11

DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:02
by 史上最悪のデスペナ
こちらで過去に立てられた同じような質問を見ても原因がわかりません
http://homepage2.nifty.com/natupaji/DxL ... tml#R13N14
のサンプルプログラムです(TCPのほうも出来ませんが、原因は同じではないかと思われるので)

現在、同じルータに接続された二台のコンピュータで試みています。最終的には
サーバー ――― ルータ ――― インターネット ――― ルータ ――― クライアント
としたいです。

IPアドレスはコマンドプロンプトにipconfigと入力し、得られたIPv4の192.168.100.100を入力しました。

エラー原因はまったく心当たりはありませんが、接続が確立されないようです。
使用OSはともにWindows7です

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:06
by softya(ソフト屋)
状況がよくわかりませんが、今はLAN内で通信を試みられているって状況でしょうか?
サーバー ――― ルータ ――― クライアント
ですか?

相手のIPアドレスにpingを打って反応はある状況でしょうか?

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:12
by YuO
Windows ファイアウォールに許可の受信規則を追加していないということはないですか。

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:34
by 史上最悪のデスペナ
softya(ソフト屋)さん

>状況がよくわかりませんが、今はLAN内で通信を試みられているって状況でしょうか?
そうです
>サーバー ――― ルータ ――― クライアント    ですか?
多分・・・・

>相手のIPアドレスにpingを打って反応はある状況でしょうか?
えっと・・・・どういうことでしょうか?pingって・・・・?

YuOさん

確かにServer側が「送信のみ」になっていました。
しかし、「許可」にしても結果は変わりませんでした・・・・orz

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:41
by softya(ソフト屋)
これは詳しく説明してもらったほうが良いですね。
pingも知らないとなると通信関係は知識が殆ど無いと言って良いと思います。

・サーバーとクライアントのPCは別PCですか?
・サーバーとクライアントのテストに使ったソースコードを見せてください。codeタグをご利用ください。詳しくはフォーラムルールを。
・サーバーとクライアントのIPアドレスをそれぞれ教えてください。
・コマンドプロンプトでping IPアドレスと打ち込むと通信試験ができます。結果を貼ってくださいね。

以上をお願いします。

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 12:58
by 史上最悪のデスペナ
>サーバーとクライアントのPCは別PCですか?
そうです。機種どころかノートとネットブックという違いです
>サーバーとクライアントのテストに使ったソースコードを見せてください。codeタグをご利用ください。詳しくはフォーラムルールを。
コンパイラはVidualStdio2010ExpressEditionです
C++の知識はポインタ、構造体、クラスを使えます
サーバー

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow )
{
	char StrBuf[ 256 ] ;	// データバッファ
	int NetUDPHandle ;		// ネットワークハンドル

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// UDP通信用のソケットハンドルを作成
	NetUDPHandle = MakeUDPSocket( 9850 ) ;

	// 受信待ちだよと表示
	DrawString( 0, 0, "受信待ち", GetColor( 255,255,255 ) ) ;

	// 文字列の受信を待つ
	while( CheckNetWorkRecvUDP( NetUDPHandle ) == FALSE )
	{
		// ウインドウズメッセージ処理
		if( ProcessMessage() < 0 ) break ;
	}

	// 受信
	NetWorkRecvUDP( NetUDPHandle, NULL, NULL, StrBuf, 256, FALSE ) ;

	// 受信した文字列を画面に描画
	ClearDrawScreen() ;
	DrawString( 0, 0, StrBuf, GetColor( 255,255,255 ) ) ;

	// キー入力待ち
	WaitKey() ;

	// UDPソケットハンドルの削除
	DeleteUDPSocket( NetUDPHandle ) ; 

	DxLib_End() ;	// DXライブラリ使用の終了処理

	return 0 ;	// ソフトの終了
}
クライアント

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow )
{
	IPDATA Ip ;		// 送信用IPアドレスデータ
	int NetUDPHandle ;		// ネットワークハンドル

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// UDP通信用のソケットハンドルを作成
	NetUDPHandle = MakeUDPSocket( -1 ) ;

	// IPアドレスを設定( ここにある4つのIP値は仮です )
	Ip.d1 = 192 ;
	Ip.d2 = 168 ;
	Ip.d3 = 100 ;
	Ip.d4 = 100 ;

	// 文字列の送信
	NetWorkSendUDP( NetUDPHandle, Ip, 9850, "メッセージ!!", 15 ) ;

	// 送信したよと表示
	DrawString( 0, 0, "文字列を送信しました、何かキーを押すと終了します", GetColor( 255,255,255 ) ) ;

	// キー入力待ち
	WaitKey() ;

	// UDPソケットハンドルの削除
	DeleteUDPSocket( NetUDPHandle ) ; 

	DxLib_End() ;	// DXライブラリ使用の終了処理

	return 0 ;	// ソフトの終了
}
>サーバーとクライアントのIPアドレスをそれぞれ教えてください。
サーバー:192.168.100.100
クライアント:192.168.100.101
>コマンドプロンプトでping IPアドレスと打ち込むと通信試験ができます。結果を貼ってくださいね。
ping要求ではホストIPアドレスが見つかりませんでした。ホスト名を確認してもう一度実行してください
と出ました

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 13:05
by softya(ソフト屋)
クライアントのPCで
ping 192.168.100.100
と打ち込んで「ping要求ではホストIPアドレスが見つかりませんでした。ホスト名を確認してもう一度実行してください」と出た場合はサーバー側のWindowsファイヤウォールかウィルス対策ソフトのファイヤウォールがはじいている可能性が高いです。調べてみてください。
あるいは接続しているスイッチングハブやルーターがLAN内の通信を禁止している可能性もあります。

クライアントで下記ソフトを実行してサーバーは見えるでしょうか?
「Microsoft Windows Network 情報表示プログラム DomainView-- for Windows NT4.0/2000/XP」
http://www.wackyfactory.net/domvw/

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 13:06
by 史上最悪のデスペナ
あ、もしかしてpingってオンラインゲームとかである「応答速度」のことでしょうか?

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 13:10
by softya(ソフト屋)
史上最悪のデスペナ さんが書きました:あ、もしかしてpingってオンラインゲームとかである「応答速度」のことでしょうか?
それはpingの機能の一端でしかないですが、オンラインゲームではそういう意味で使われている場合がありますね。
「ping - Wikipedia」
http://ja.wikipedia.org/wiki/Ping

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 13:16
by 史上最悪のデスペナ
クライアント側でやってませんでした。しかもサーバー側で「ping IPアドレス」って打ってました・・・
クライアント側でやると
192.168.100.100にpingを送信しています 32バイトのデータ:
要求がタイムアウトしました
要求がタイムアウトしました
192.168.100.101からの応答:宛先ホストに到達できません。
192.168.100.101からの応答:宛先ホストに到達できません。

192.168.100.100のping統計:
 パケット数:送信=4、受信=2、損失=2(50%の損失)、
となりました

サーバーが確認できませんでした・・・・

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 14:39
by softya(ソフト屋)
サーバーと接続できないと話になりませんので、最悪該当PCとLANケーブルで直結してみてください。
DHCPでIPアドレスが自動割り当てされている場合は、固定IPアドレスにする必要があります。

ところで、DomainViewでは何も表示されなかったのでしょうか?

ネットワークの勉強も最低限行ってください。
「TCP/IP入門」
http://net-newbie.com/tcpip/
「TCP/IP入門 - @IT」
http://www.atmarkit.co.jp/channel/tcpip/tcpip.html

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月14日(木) 21:10
by Dixq (管理人)
とりあえず分からないことがあればgoogleで検索してみるといいですよ。

http://www.google.co.jp/#sclient=psy&hl ... 3&bih=1066

pingはネットワークのプログラムを作る上で不可欠なコマンドと言えましょう。
また、ルータを超える場合、ポート解放が難点になります。
http://www.google.co.jp/#sclient=psy&hl ... e96b613019

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月16日(土) 11:19
by 史上最悪のデスペナ
WiMax使っているのでLANケーブルがなく、わざわざそのために買うのも・・・という気もするので現在手に入れるため奔走中です。
また、もうすぐ大学の前期試験があるためしばらく放置させていただきます
softya(ソフト屋)さん、申し訳ありませんが、また戻ってきたらよろしくお願いします

Dixq (管理人) さん。もちろん、分からないことはぐぐってますよ~w。それでもわからないことをこちらで質問させていただいてます

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月16日(土) 11:30
by softya(ソフト屋)
史上最悪のデスペナ さんが書きました:WiMax使っているのでLANケーブルがなく、わざわざそのために買うのも・・・という気もするので現在手に入れるため奔走中です。
短いケーブルなら百均にあります。
WiMaxの接続設定を変更すれば出来るかも知れませんが学内なら許可が必要かも知れません(セキュリティ的に弱くなるので)。
一番簡単なのはWiMaxから切り離した有線LANのサーバーとクライアントにしてしまう事でしょうね。

Re: DXライブラリサンプルが動かない理由がわからない

Posted: 2011年7月21日(木) 11:55
by 史上最悪のデスペナ
クロスケーブルをゲットしたので有線接続したところ、上手くいきました。
やはり、WiMaxの問題でしょうか?WiMaxに関してはこちらで設定をいじれないので・・・・有線のみでがんばってみます。
お騒がせしました