我正在评估以下块:
[byteStream atEnd] whileFalse: [stream nextPut: self parsePacket]
问题是我的“字节流”是一个读写流,在它的末尾,(我检查它并且位置=读取限制=写入限制=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 32bit 上尝试了代码,它工作正常,但在 linux 32bit 上却没有,我认为它与操作系统 UDP 网络有关?