G
Guest
Hi,
I am doing a streaming application from Ipaq to Ipaq. I'm transmiting the
data over a Datagram Socket. One thread is dedicated to sending the data. It
is something alike this :
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
//set a large send buffer to the socket (400 ko)
socket.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveBuffer, 400000);
while (keepAlive)
{
byte[] data = dataSource.getData();
socket.SendTo(data , 0, dataSize, SocketFlags.None, remoteEndPoint);
//If I add this line, it is working fine
//Thread.Sleep(50);
}
The dataSize is 38000 bytes. The while loop is executed about 30 times a
second, so it represents a bitrate of around 10 Mbit/S ! which is much more
than my wireless lan network capacity.
The program behavior is the following :
The receiver program start receiving packets... and after about 10 packets,
it is receiving nothing.
The sender program (described above) reports it is sending packets without
interruption even though the receiver is receiving nothing.... after 1 minute
or so, the sender crash "assembly not found exeception", and a soft restart
of the Ipaq is the only way to get it working smooth again.
If I uncomment the line :
Thread.Sleep(50);
the sender works without crashing, and the receiver keeps receiving all the
packets.
It seems that the Socket is not working properly when it is asked to
transmit more data than what it is physically possible to transmit.
I expected the socket.SendTo method to block until the data are actually
sent, so that it would block long enough to slow down the program to the
speed matching the maximum bitrate that can be supported by the network...
but it seems it is not the case. (by the way, I checked the socket has
blocking = true).
I can't let the Sleep operation.. because the data I am sending are real
time, and should be sent as fast as possible..
My questions are :
what's wrong with the socket ?
why doesn't it block longer, to send the data at an appropriate rate?
what can I do to my program to be sure it will not crash, and to send the
data as fast as possible.
Thanks a lot!
Lionel Reyero
I am doing a streaming application from Ipaq to Ipaq. I'm transmiting the
data over a Datagram Socket. One thread is dedicated to sending the data. It
is something alike this :
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
//set a large send buffer to the socket (400 ko)
socket.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveBuffer, 400000);
while (keepAlive)
{
byte[] data = dataSource.getData();
socket.SendTo(data , 0, dataSize, SocketFlags.None, remoteEndPoint);
//If I add this line, it is working fine
//Thread.Sleep(50);
}
The dataSize is 38000 bytes. The while loop is executed about 30 times a
second, so it represents a bitrate of around 10 Mbit/S ! which is much more
than my wireless lan network capacity.
The program behavior is the following :
The receiver program start receiving packets... and after about 10 packets,
it is receiving nothing.
The sender program (described above) reports it is sending packets without
interruption even though the receiver is receiving nothing.... after 1 minute
or so, the sender crash "assembly not found exeception", and a soft restart
of the Ipaq is the only way to get it working smooth again.
If I uncomment the line :
Thread.Sleep(50);
the sender works without crashing, and the receiver keeps receiving all the
packets.
It seems that the Socket is not working properly when it is asked to
transmit more data than what it is physically possible to transmit.
I expected the socket.SendTo method to block until the data are actually
sent, so that it would block long enough to slow down the program to the
speed matching the maximum bitrate that can be supported by the network...
but it seems it is not the case. (by the way, I checked the socket has
blocking = true).
I can't let the Sleep operation.. because the data I am sending are real
time, and should be sent as fast as possible..
My questions are :
what's wrong with the socket ?
why doesn't it block longer, to send the data at an appropriate rate?
what can I do to my program to be sure it will not crash, and to send the
data as fast as possible.
Thanks a lot!
Lionel Reyero