View Single Post
  #2   Spotlight this post!  
Unread 09-03-2012, 11:00
derekwhite's Avatar
derekwhite derekwhite is offline
Java Virtual Machine Hacker
no team (FIRST@Oracle)
Team Role: Programmer
 
Join Date: May 2009
Rookie Year: 2009
Location: Burlington, MA
Posts: 127
derekwhite is on a distinguished road
Re: URGENT Sending data over tcp

Here are some things to check out:

1) Is RoboRealm flushing output at every int, or is getting buffered?

2) Why is "instream.read()" called 2x in your loop?

3) The field "Socket.datain" is being used to communicate between threads. For correct portable code this should be declared "volatile", or all reads and writes should be guarded by synchronized statements. This shouldn't actually matter for Java on the cRIO though.

4) There isn't any built-in Java-level input buffering on a Socket's input stream in this version of Java. That shouldn't result in a 10x slowdown though.

To test this you could try reading into a 4-byte array, and constructing an int from that

Code:
byte b[] = new byte[4];

while (true) {
    int len = instream.read(b, 0, b.length); // should check that len is 4, and buffer up until full, but in practice you should see 4 bytes...

    datain = (b[0] << 24) | ((b[1] & 0xFF) << 16) |((b[2] & 0xFF) << 8) | (b[1] & 0xFF);  // or reverse the byte order if necessary.
}
Reply With Quote