Оценявам следния блок:
[byteStream atEnd] whileFalse: [stream nextPut: self parsePacket]
Проблемът е, че моят "byteStream", който е поток ReadWrite, е в края си (проверявам го и позицията = ограничението за четене = ограничението за запис = 512) и цикълът ми не спира, както ако: " [ byteStream atEnd] " няма ефект. Използвам VisualWorks 7.9.1 под linux и моят byteStream се захранва чрез UDP Socket. Всяка помощ е добре дошла.
Ето кода на сървъра:
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 мрежата на OS?
byteStream
отparse
е същият поток катоdataStream
отlistenOnPort:
, нали? - person Dave Newman   schedule 09.04.2013