getting called only once.
"Joseph M. Newcomer" wrote:
It doesn't matter HOW MANY send calls one side does; the other side will
receive what it
receives. You might do one send() and take 20 receive()s to get the
data, or 20 sends()
which all appear on one receive(). It is a stream-oriented protocol and
there is NO
CORRELATION between the number of send()s and the number of receive()s.
Note also that if you do
while sending 1000-byte packets, you will quite possibly see
and that's just TWO of the possible scenarios. There is not only no
the number of sends and number of receives, there is no correlation
between the size of
the data in a single send and the size of the data in a single receive.
COMPLETELY INDEPENDENT concepts. send() creates a stream of bytes, which
are sent out in
bunches of whatever sizes the sending stack chooses to send, which are
received by the
receiving stack, and which are reassembled into streams. Depending on
the timing, network
traffic, phase of the moon, and number of sunspots, you can get different
lengths on a
sequence of successive experiments.
It is a common error to think that size-of-send and number-of-sends
correlates in any way
whatsoever with size-of-receive and number-of-receives. The only thing
is that the receives will receive a sequence of bytes which, ultimately,
are in 1:1
correlation with the sequence of bytes sent. But how those are managed
in terms of IP
data packets, how send()s are coalesced into outgoing packets, how
receive()s get the data
and reassemble it for you, is entirely up to the network stacks, and can
Note that if your data format uses a length field, and the length field
is a multibyte
value, then it is always possible for a split to happen in the middle of
the length field,
and you will have to cope with this. This is typically done by using a
finite-state-machine (FSM) model for packet-parsing. I illustrate such an
algorithm in my
multithreaded TCP/IP example on my MVP Tips site.
On Mon, 12 Jan 2009 21:01:00 -0800, nexolite
I have a server that makes two consecutive calls to send()
so I have verified by using telnet client that both the strings are
but my MFC client's program OnReceieve gets called only once, I am
Receive to read data but OnReceive itself is not getting called more
"Scott McPhillips [MVP]" wrote:
"nexolite" <email@example.com> wrote in message
CSocket::OnReceive() getting called only once .
What can be the reason?
There can be two reasons.
1. If you don't call Receive on OnReceive
2. If no more data arrives.
Scott McPhillips [VC++ MVP]
Joseph M. Newcomer [MVP]
MVP Tips: http://www.flounder.com/mvp_tips.htm