On Mar 15, 7:36 pm, Esmond Pitt <esmond.p...@nospam.bigpond.com>
wrote:
Can you show us some code?
I certainly can!
I retried the test with a version that does not use swing and does not
create any additional threads. The source is below. I get the exact
same result.
The messsage source (DSP board) is sending UDP packets of 125 bytes to
a PC that is running a C and Java program that do nothing but count
these arrivals and print out message counts every 1000 messages. I
can control the send rate at the source. At 50/messages per second,
the C and Java program are both printing out 1000, 2000, 3000, etc at
the same time, and in addition this also matches the count of sent
messages at the source. I increase to 75/messages per second. The C
program message count continues to match the send count on the DSP
board, but the Java program starts to lag behind (the C program prints
out 1000...the java program prints out 1000 several seconds later).
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
public class test
{
public static final int SERVER_PORT = 4242;
public static final String SERVER_IP = "192.168.1.10";
public static final int RECV_BUFFER_SIZE = 1024;
public static void main(String args[])
{
int messageCount = 0;
byte[] recvBytes = new byte[ RECV_BUFFER_SIZE ];
InetSocketAddress address = new
InetSocketAddress(test.SERVER_IP, test.SERVER_PORT );
DatagramPacket packet = new DatagramPacket( recvBytes,
RECV_BUFFER_SIZE);
DatagramSocket socket;
try
{
socket = new DatagramSocket();
socket.connect( address );
// Send registration message
byte[] sendBuf = new byte[1];
sendBuf[0] = 1;
DatagramPacket sendPacket = new DatagramPacket( sendBuf,
sendBuf.length,
address );
socket.send( sendPacket );
// Wait for registration response
socket.setSoTimeout(30000);
socket.receive( packet );
socket.setSoTimeout(0);
while( true )
{
socket.receive( packet );
messageCount++;
if( (messageCount % 1000) == 0 )
{
System.out.println( "Messages = " + messageCount );
}
}
}
catch (IOException ex)
{
ex.printStackTrace();
System.exit(1);
}
}
}
I don't know what JVM you use, but trying "java -server" is one option.
have a chance to kick in. Maybe you can refactor the code to a method,
this method in an infinite loop.
may be that there are issues if you have varying packet sizes.