次のブロックを評価しています:
[byteStream atEnd] whileFalse: [stream nextPut: self parsePacket]
問題は、ReadWrite ストリームである「byteStream」が最後にあることです (私はそれを検査し、位置 = 読み取り制限 = 書き込み制限 = 512)、次の場合のようにループが停止しません: " [ byteStream atEnd] " は効果がありませんでした。LinuxでVisualWorks 7.9.1を使用しており、byteStreamはUDPソケットを介して供給されます。どんな助けでも大歓迎です。
サーバーコードは次のとおりです。
listenOnPort: aPort
| server peerAddr |
self initialize.
server := SocketAccessor newUDPserverAtPort: aPort.
peerAddr := IPSocketAddress hostName:'localhost' port: aPort.
process :=
[
[| buf sizeOfBuf |
buf := String new: 2048.
sizeOfBuf := server bufferSize.
sizeOfBuf > 0
ifTrue:
[| dataStream |
server readWait.
server receiveFrom: peerAddr buffer: buf.
dataStream := ReadStream on: buf from: 1 to: sizeOfBuf.
dataStream reset.
self receive: dataStream]]
repeat.]
fork.
バッファに含まれるものを解析するコードは次のとおりです。
parse
^ Array streamContents: [:stream |
[byteStream atEnd] whileFalse: [stream nextPut: self parsePacket]
]
解析メソッドのループが問題です。Windows XP 32 ビットでコードを試してみましたが、正常に動作しましたが、Linux 32 ビットでは動作しません。OS UDP ネットワークと関係があると思いますか?