北東崎鳳凰−記録帳
DiaryINDEX|past|will
| 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は試験段階でしか 使うことも無いかも。 自身で受信ってのは、今回の場合は必要は無いですし。
|