北東崎鳳凰−記録帳
DiaryINDEXpastwill


2006年10月09日(月) 細かい仕様は後にして

sendto(), Error = 10049
http://homepage1.nifty.com/yito/anhttpd/winsock_error.html
WSAEADDRNOTAVAIL Can't assign requested address 無効なネットワークアドレス。
ソケット関数に渡されたネットワークアドレスに無効な部分がある。
INADDR_ANY指定がまずかったようです。
udpsend2(INADDR_BROADCAST,5006,"1001");
こうします。

これを自分自身にやると なぜか三つも受信する・・・。
一つだけにならないものかね。
送信元を明示しないと 困難かな。

送受信元のIPも把握している必要有りますが
tcpはそういうの明示されているのに対し
udpは幾らか緩いですな。
まぁ・・・今回の場合は 自LAN内というか
自ルーター内のアドレスに限定すれば良いので
いちいち汎用性を持たせなくても良いです。
192.168.1.まで共通してます。あとは、11 12 13 14 22。
変化することも当然ありえますが
今はこいつら固定で良いでしょう。
変化に対応するのなら、一通り出来た後で。


udpsend2(0xc0a8010b,5005,"本日は晴天なり");
//192.168.1.11 -> 0xc0a8010b
こういう指定の仕方になりますな。
192->0xc0
168->a8
1->01
11->0b
こいつを繋げて指定。

逆に、こういう数値が入ってきた時に
4番目を特定するには
4banme = 0xc08010b & 0xff;
で抽出できますな。
2進数の11111111でAND。

11 5005 送信→3つ受信

12 5005 1つ受信

13 5005 1つ受信

14 5005 1つ受信

22 5005 1つ受信

11にクライアントとサーバー両方設置
あとサーバー配置。
全部同じポートで待ち受けて
udpsend2(INADDR_BROADCAST,5005,"本日は晴天なり");
これやると、こうなります。
一気に全部行ってくれるのは ある意味かなり楽ですが
誰も待ち受けていなくてもエラーになりません・・・。
この情報は、ルーターの外にも行くのかどうか・・・
そこんとこはまだ知りません。

あと、自身で送受信すると
三つも受信してくれるのもどうしたものやら・・・。
自身だということを、送信データに明示して
三つ来た場合は一つと解釈するようにしますか・・・。

どういう形式でデータを送受信するか。
汎用性をあまり考えなくて良いなら
"11ff"
"14fe"
4文字の文字列にして、前半を宛て先
後半を指示内容
とかで良いですかね・・・。

プログラム設計の話であれこれって感じです。

あー、INADDR_BROADCASTは試験段階でしか
使うことも無いかも。
自身で受信ってのは、今回の場合は必要は無いですし。


北東崎鳳凰 |MAILHomePage