Solved

Please help me to complete this code please

Posted on 2004-04-07
13
223 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:
mayankeagle 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:mayankeagle
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
 
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
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:mayankeagle
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:mayankeagle
ID: 11047620
Please proceed with that recommendation.
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
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 arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…

757 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now