> It's easy with LineMode on - ICS only forwards the data on when it
> receives a delimeter.  But when it's off, it seems as though anything
> other than file sends and receives (because you don't really act on the
> file stream, you just send or recieve its bytes) proves to be a
> difficult task.

If not using a delimiter, you must use a byte count. In any case, the receiver 
need to know how much
data has been sent by the sender. TCP doesn't preserve boundaries: it send all 
data in the correct
order, without error and only once. But it can split or merge data according to 
what is needed by
the network layer.

Most protocols use line mode (SMTP, POP3, NNTP, ...) some use both : FTP and 
HTTP. FTP use two TCP
connections: one for commands and one for data. On command stream, it use line 
mode. On data stream,
it just send data. End of data is found because the stream is simply closed. 
HTTP use a single TCP
stream, begin with line mode in his header and then switch to byte count for 
the document. Byte
count is given in one of the header lines.

So what do you have to do ? You have to design your own protocol, using line 
mode or not, it is not
very important. What is important is that at any moment one side know what the 
other is trying to
do.

I understood that you don't want to use line mode. Perfect for me. Use a byte 
count. You can, for
example build each of your message with 4 byte being a 32 bit integer that 
gives the number of data
bytes that follow. Send is trivial. Receiving require a buffer where you append 
everything you
receive. Each time you received something (OnDataAvailable event, then call 
Receive method), you
check how many bytes you have received. If less than 4, you just do nothing 
more. If more than 4,
then you received your count. You compare the count with the actual data 
received. If you have
enough data, you trigger your own event, such as OnMessageReceived, passing the 
count of bytes and
the pointer to the first byte into your buffer (You can also copy the data but 
if will be slower).
When the event handler returns, you remove the count and the message data from 
the buffer, keeping
the rest for the next round.

--
[EMAIL PROTECTED]
http://www.overbyte.be


-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to