Solved

Please help me to complete this code please

Posted on 2004-04-07
13
240 Views
Last Modified: 2008-02-01
Hi
I wonder if anybody could help me.I desprately need help

Please have a look the following code :-
import java.io.*;
import java.net.*;

class TypeConvertion
{
  //Get a short integer from two bytes with offset in the buf
  public static short getShort(byte[] buf, int offset)
  {
    int high = buf[offset] & 0xff;
    int low  = buf[offset+1] & 0xff;
    return (short)(high <<8 | low);
  }


  //Store a short integer to two bytes with offset in the buf
  public static void putShort(byte[] buf, int offset, short value)
  {
    byte low      = (byte)(value & 0xff);
    byte high     = (byte)(value>>8 & 0xff);
    buf[offset]   = high;
    buf[offset+1] = low;
    return;
  }
}


public class TFTPClient
{
   short        seqn;
   byte         outb[];
   byte         inb[];
   String       fname;  //The file name
   InetAddress  server; //sever&#8217;s IP address
   int                   sport;  //server&#8217;s port number

   DatagramPacket odp;
   DatagramPacket idp;
   DatagramSocket sock;

   TFTPClient(String sn, String sp, String fn) throws Exception
   {
      seqn   = 0;
      outb   = new byte[516];
      inb     = new byte[516];
      server = InetAddress.getByName(sn); //Get server&#8217;s IP
     
    //Convert port string to port number
     sport = Integer.parseInt(sp);
     
     fname = fn;
     idp     = new DatagramPacket(inb,inb.length);
   
    //Create Datagram Socket*/
     sock  = new DatagramSocket();

    }
      
   void SendACK() throws Exception
   {
     int index = 0;
 
    //Fill ACK opcode =0x0004 field
    TypeConversion.putShort(outb,index,(short)4);
    index + = 2;
   
    //Fill ACK SEQ field
    TypeConversion.putShort(buff,index,seqn);/*ACK SEQ*/
    index + =2;

    /*Generating ACK datagram packet*/
    /*...*/
 
 
    /*Send out the ACK datagram packet*/
    /*...*/
  }

   void SendRRQ() throws Exception
   {
    int index = 0;
      
    //Fill RRQ opcode = 0x0001 field
    TypeConversion.putShort(outb,index,(short)1);
    index + = 2;
      
    //Fill the file name field
    byte[] temp = fname.getBytes();
    for(int i = 0;i < temp.length;i++);
    outb [i + index] = temp[i];
  }
    index +      = temp.length;
    outb[index] = 0; //End of the file name
    index +       = 1;
      
    //Fill the file data mode, using octet mode
    String mode = "octet";
    temp        = mode.getBytes();

    for(int i = 0;i <temp.length; i++)
        {
        outb[i+index] = temp[i];
        }
   

     /*Fill the end indicator of the packet*/
     /*...*/
    /*Generating ACK packet*/
    /*...*/
    /*Send out the ACK packet*/
    /*...*/
}

    void getFile() throws Exception{
    /*Create a file*/
    /*...*/
    /*Using FileOutputStream to open the file*/
    /*...*/
    int opcode;
    short rseq;
    int length;
    /*Send RRQ packet*/
    /*...*/
    while(true)
      {
    /*Receive the packet to idp from the server*/
    /*...*/
   /*Get OPCODE from the packet*/
   opcode=TypeConvertion.getShort(inb,0);
   if(opcode!=0x0003){ /*DATA*/
   continue;
}
  /*Get SEQ from the packet*/
  rseq   = TypeConvertion.getShort(inb,2);
  if(rseq==seqn+1){/*it is a new packet*/
  /*We don't check the server's IP address*/
  /*Store the data into file*/
  fos.write(inb,4,length-4);
  seqn=rseq;
  /*Send ACK*/
  /*...*/
 if(length<516){/*check end of the file*/
 sock.close();
 fos.close();
 return;
}
continue;
}
if(rseq==seqn){ /*duplicated copy*/
/*Acknowledge the received packet again*/
/*...*/


continue;
}
/*error sequence, do nothing*/
}
}
public void main(String args[]) throws Exception{
if(args.length!=3){
System.out.println("Usage: TFTPClient <servername>
<port> <filename>");
return;
}
TFTPClient tftp=new TFTPClient(args[0],args[1],args[2]);
tftp.getFile();
}
}

This is a simple  TFTP client whose function is to retrive the file from the TFTP server and store in a local file.Could anybody please fill the empty parts under the comments.(/*.......*/)


Thank you

0
Comment
Question by:Rafi-muqaddar
  • 5
  • 4
13 Comments
 
LVL 30

Accepted Solution

by:
Mayank S earned 250 total points
ID: 10773708
>> Could anybody please fill the empty parts under the comments

There are too many of them. Is this homework?

Anyway, some examples here to help you code that on your own:

Datagram receiving - http://www.javaalmanac.com/egs/java.net/ReceiveDatagram.html

Datagram sending - http://www.javaalmanac.com/egs/java.net/SendDatagram.html

Files - http://www.javaalmanac.com/cgi-bin/search/find.pl?words=File
0
 

Author Comment

by:Rafi-muqaddar
ID: 10774007
Thank you for your reply.
Just Tell me how to write Acknowledgement datagram packet in terms of this program.
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 10774044
Well, you would be the best person to write that because you would know what is the 'format' of the acknowledgement to be sent. Have a look at the Datagram sending example that I sent. You can create an array of bytes depending upon the format the of acknowledgement and pass it to the method there in the outbuf[] argument.

Something like:

String sAck = "<ACK>This is the Acknowledgement</ACK>" ;
byte[] buf = sAck.getBytes () ;
0
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 
LVL 13

Assisted Solution

by:Webstorm
Webstorm earned 250 total points
ID: 10774060
Hi Rafi-muqaddar,

First correction :

  public static short getShort(byte[] buf, int offset)
  {
    short high = (short)buf[offset] & 0xff;
    short low  = (short)buf[offset+1] & 0xff;
    return (short)((high << 8) | low);
  }

0
 
LVL 13

Expert Comment

by:Webstorm
ID: 10774372
Second correction :

   for(int i = 0;i < temp.length;i++);
    outb [i + index] = temp[i];
  }

Should be :

   for(int i = 0;i < temp.length;i++){
    outb [i + index] = temp[i];
  }

or

   for(int i = 0;i < temp.length;i++)
    outb [i + index] = temp[i];
0
 
LVL 13

Expert Comment

by:Webstorm
ID: 10774391
Simplification :

Replace :

   for(int i = 0;i < temp.length;i++)
    outb [i + index] = temp[i];

    index +      = temp.length;
    outb[index] = 0; //End of the file name
    index +       = 1;

By :

   for(int i = 0;i < temp.length;i++)
       outb [index++] = temp[i];
   outb [index++] = 0; //End of the file name

0
 
LVL 13

Expert Comment

by:Webstorm
ID: 10774441
  String mode = "octet";
    temp        = mode.getBytes();

    for(int i = 0;i <temp.length; i++)
       {
        outb[i+index] = temp[i];
       }

--->

   String mode = "octet";
    temp        = mode.getBytes();

    for(int i = 0;i <temp.length; i++)
        outb[index++] = temp[i];

    /* send the packet (index = length) */
    sock.sendPacket(new DatagramPacket(outb, index, server_adr, server_port));
    /* server_adr is InetAddress of TFTP server */

http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html
http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramPacket.html

0
 
LVL 30

Expert Comment

by:Mayank S
ID: 10958593
Split: Webstorm and mayankeagle.
0
 
LVL 13

Expert Comment

by:Webstorm
ID: 10958920
>> Split: Webstorm and mayankeagle.
I agree this suggestion.
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 11047620
Please proceed with that recommendation.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
replace a word with other 1 44
web services creation SOAP vs REST 5 41
HashTable highest marks enumeration alternative 9 38
web application structure 18 77
For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…

773 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question