• 0

Bytes with TCP socket and bit manipulation


Question

I'm taking a computer communication summer class and this is our 2nd and last program project. The protocol for the assignment can be found here.

I've already done one project that involves a client and server connecting and playing a game of guess the number with strings being sent back and forth. For this project though we have to manipulate individual bits of bytes and send only bytes across the socket connection. How do you do this in Java? I haven't been able to find anything about forming bytes with particular bits and sending just bytes across the connection.

11 answers to this question

Recommended Posts

  • 0

I'm not sure what your project assignment is doing (I dont' have time to read it). But from my experience in Java, to read binary data you use InputStream or OutputStream to read and write binary data.

Here's an example:

Let's assume "sock" is your socket connection.

InputStream in = sock.getInputStream();
while (in.read() != -1)
{
     //do whatever you need to do with it
}

You can also look at sun's java api for more info (search for inputstream).

Hope this helps!

  • 0

I've read some of the things on the input and output streams and i'll be definitely be using them. My problem comes after I've received the bytes. I have to use certain control bytes as notifiers for things:

00000001- REQuest connection.

00000010 - CONnection Granted.

ssss0011 - FILe name packet (sequence number sss = 000).

ssss0100 - DATa Packet, where sss is the sequence number of the packet.

ssss0101 - Short Data Packet(SDP), where sss is the sequence number of the packet.

ssss0110 - ACKnowledgment packet, where sss is the sequence number of the packet expected next.

ssss 0111 - list request packet (sequence number sss = 000).

0000 1111 - TERmination (a simple two-way handshake).

After I've received the bytes I don't understand how to interpret the different bits of the bytes to know what I'm dealing with.

  • 0

You can AND them (note this is C-style code)

if(byte == 0x01) // REQuest connection
{
}
else if(byte == 0x02) // CONnection granted
{
}
else if(byte & 0x0F == 0x03) // FILe name packet
{
    sequence = (byte & 0xF0) >> 4;
}

  • 0

Thx for the info Andareed!

I've taken computer structures so I understand the idea of And'ing and Or'ing things but I don't quite understand the hex strings your using. Any extra tips on those? I tried google'ing some stuff but it didn't really help. Also, what exactly does the >> do.

Edit:

Since hex is 16 bits I'm guessing the first digit is the first 4 bits and when you check for 0x0F you're testing to see if the first 3 bits are all 1's to know it's a file packet and similarly for the others. The >> still confuses me though.

Edited by Little Moe
  • 0

I've run into another problem. When sending a packet with file information one of the bytes has to be a one-byte unsigned binary value. I've found a whole lot of stuff about doing unsigned bytes in Java by using ints and AND'ing stuff with 0x0FF but my I think my problem comes with actually sending the byte.

My teacher expects our clients and servers to run against his C clients and servers. He gave us an example exe of each and whenever I run my client against his it says "Number of char in file name should be between 1 and 124 - LEN field = 0" like it's not getting my byte at all. I'm thinking it's either the byte I'm using or something special in the OutputStream that might be messing up my byte? I know there is no difference between the bits of a signed or unsigned byte but something is going wrong. Does anyone have an example of sending a byte like he is asking or maybe if I'm thinking of this wrong.

  • 0

I ended up finishing the project. My biggest problem starting off was I was trying to send bytes individually by just writing the bytes one at a time. My teacher was expecting the bytes one right after another. I had to send a byte array for him to get everything in a packet that I wanted. Couldn't just test one byte at a time. Had to test things just by hardcoding byte array values to see what happened.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • From cars to cosmos: Honda's experimental rocket aces first landing test by Paul Hill Image via Honda Watch your back SpaceX, the Japanese company Honda has just performed a successful first launch of its experimental reusable rocket. The 6.3 meter rocket, which weighs 900kg, reached a modest altitude of 271.4 meters, but managed to land within 37cm of its target (1.2 feet), which is certainly pretty close. The rocket took off from a Honda facility in Taiki Town, Hokkaido, a growing space town in Japan. The flight time was also modest, coming in at just 56.6 seconds, but in that time, Honda was able to demonstrate key reusability technologies such as flight stability and landing capability. This marks a significant milestone for Honda’s space R&D department, which began work just four years ago. If you remember the tests SpaceX was performing around 2012 with Grasshopper, well Honda is at about the same stage with its reusable rocket. Why Honda is building rockets: Beyond cars and motorcycles Honda said that it wants to leverage core technologies it already works on for offering space services. It said that reusable rockets are a key part of sustainable space transportation. By 2029, the company wants to be able to perform suborbital launches, and while commercialization hasn’t been decided yet, it sees itself launching remote-sensing and wide-area communication satellites in the future. The Japanese car maker sees growing demand for satellite launches and wants to be involved by developing reusable rockets which could help it perform such launches economically. If it does end up finding customers, it will add more competition to the rocket launch sector. While the company hasn’t confirmed this, by developing its own launch system, it could eventually be in a position to launch its own satellites that could provide services to its cars to add value for customers. The competitive landscape and Japan's space ambitions Honda is just the latest company to join the growing list of companies trying to develop reusable rocket technology. The most famous companies doing this are SpaceX and Blue Origin, but there are also lots of other companies around the world also developing this technology. Honda is still taking baby steps compared to SpaceX, but it shows that the company is taking a focused, step-by-step approach, and achieving successes as noted by this launch. Hopefully, the company ends up providing tough competition against SpaceX, Blue Origin, and other companies so that it can help to drive down prices and spur on innovation.
    • Does that subscription include international data roaming, inclusive of Russia?
    • If you're stupid enough to try and get one, each and every headache along the way is on you. I can only hope that these roadblocks on a pre-order are enough to dissuade people.
    • "You should have a Microsoft Account because we can help keep your data safe...until we can't." As an IT guy I know that I should never put my trust in one backup solution if the data is important. But for non-IT people, they are getting tricked into Microsoft's practices with falsehoods.
    • it is delayed and has no definitive release date... that is "delayed indefinitely".
  • Recent Achievements

    • Week One Done
      TBithoney earned a badge
      Week One Done
    • First Post
      xuxlix earned a badge
      First Post
    • First Post
      Tomek Święcicki earned a badge
      First Post
    • One Year In
      carlitin86 earned a badge
      One Year In
    • Reacting Well
      Peterlll06 earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      684
    2. 2
      ATLien_0
      289
    3. 3
      Michael Scrip
      228
    4. 4
      +FloatingFatMan
      192
    5. 5
      Steven P.
      145
  • Tell a friend

    Love Neowin? Tell a friend!