[Squeak-ja: 2495] Windows 版 Squeak での UDP パケット受信について
Eiichiro Ito
e-itoh @ ygu.ac.jp
2005年 7月 4日 (月) 18:28:21 JST
山梨学院大学の伊藤です。
いつも質問ばかりで恐縮ですが、どうも自分で解決できないようなので質問
させてください。
現在、とあるアプリケーションでUDP通信を利用したいと思っております。要
するにAIBO上のC++プログラムと、Squeak上のプログラムとで定期的にUDPパケッ
トを送りあうことを考えています。
そこでUDPを利用したプログラムを書いているのですが、どうもUnixとWindows
で挙動が異なるので困っています。Unix上での通信は基本的に想像どおりに動
くのですが、Windowsではうまく受信ができないようなのです。
下は動作を確認するためのサンプルです、仮にプログラムreceiverとします。
(ど素人のためのど素人によるSqueak入門から拝借いたしました)
receiver := Socket newUDP setPort: 54321.
buff := ByteArray new: 100.
delay := Delay forMilliseconds: 100.
received := nil.
Transcript show: 'Receiver start'; cr.
[received := receiver receiveUDPDataInto: buff.
received first isZero ] whileTrue: [ delay wait ].
Transcript show: 'received(', buff, ')'; cr.
Transcript show: 'Receiver end'; cr.
これを一方のスクイークのWorkspaceで動かしておき、下のサンプル(sender)
を別のスクイークで評価します。
src := Socket newUDP.
host := NetNameResolver addressFromString: '192.168.254.64'.
src sendUDPData: 'Hello' toHost: host port: 54321.
#ipアドレスは仮のもので、receiverを起動しているPCに応じて適宜変えます。
こうして、それぞれWindowsやUnix上で動かすと動作結果が変わります。
receiver=Unix版 sender=Unix版 → OK
receiver=Unix版 sender=Windows版 → OK
receiver=Windows版 sender=Unix版 → NG
receiver=Windows版 sender=Windows版 → NG
結果から考えるにWindowsではUDPパケットの受信がうまくいかないようで、
delay waitで止まったきりになります。受信メソッドとして
receiveUDPDataInto:fromHost:port:を使った場合でも同様の結果となります。
実際、WindowsでUDP通信を利用するにはどうすればよいのでしょうか?
どなたかWindows版でUDPの通信に成功している方がいらっしゃれば、ご教示
いただければと存じます。
なお、環境は以下の通りです。
[Image]
Squeak nihongo7
[Unix VM: (squeak -version)]
3.6.3 #1 2004年 4月 18日 日曜日 21:09:15 JST gcc 2.95.3
Squeak3.6 of '6 October 2003' [latest update: #5429]
Linux sk203 2.4.22-0vl2.8smp #1 SMP 2003年 12月 3日 水曜日 00:54:08 JST i686
default plugin location: /usr/lib/squeak/3.6.3/*.so
[Windows VM:(About Squeak)]
Squeak 3.7.1 (release) from Sep 23 2004
Compiler: gcc 2.95.2 19991024 (release)
Squeak-ja メーリングリストの案内