KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > examples > tftp


1 /*
2  * Copyright 2001-2005 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package examples;
17
18 import java.io.File JavaDoc;
19 import java.io.FileInputStream JavaDoc;
20 import java.io.FileOutputStream JavaDoc;
21 import java.io.IOException JavaDoc;
22 import java.net.SocketException JavaDoc;
23 import java.net.UnknownHostException JavaDoc;
24 import org.apache.commons.net.tftp.TFTP;
25 import org.apache.commons.net.tftp.TFTPClient;
26
27 /***
28  * This is an example of a simple Java tftp client using NetComponents.
29  * Notice how all of the code is really just argument processing and
30  * error handling.
31  * <p>
32  * Usage: tftp [options] hostname localfile remotefile
33  * hostname - The name of the remote host
34  * localfile - The name of the local file to send or the name to use for
35  * the received file
36  * remotefile - The name of the remote file to receive or the name for
37  * the remote server to use to name the local file being sent.
38  * options: (The default is to assume -r -b)
39  * -s Send a local file
40  * -r Receive a remote file
41  * -a Use ASCII transfer mode
42  * -b Use binary transfer mode
43  * <p>
44  ***/

45 public final class tftp
46 {
47     static final String JavaDoc USAGE =
48         "Usage: tftp [options] hostname localfile remotefile\n\n" +
49         "hostname - The name of the remote host\n" +
50         "localfile - The name of the local file to send or the name to use for\n" +
51         "\tthe received file\n" +
52         "remotefile - The name of the remote file to receive or the name for\n" +
53         "\tthe remote server to use to name the local file being sent.\n\n" +
54         "options: (The default is to assume -r -b)\n" +
55         "\t-s Send a local file\n" +
56         "\t-r Receive a remote file\n" +
57         "\t-a Use ASCII transfer mode\n" +
58         "\t-b Use binary transfer mode\n";
59
60     public final static void main(String JavaDoc[] args)
61     {
62         boolean receiveFile = true, closed;
63         int transferMode = TFTP.BINARY_MODE, argc;
64         String JavaDoc arg, hostname, localFilename, remoteFilename;
65         TFTPClient tftp;
66
67         // Parse options
68
for (argc = 0; argc < args.length; argc++)
69         {
70             arg = args[argc];
71             if (arg.startsWith("-"))
72             {
73                 if (arg.equals("-r"))
74                     receiveFile = true;
75                 else if (arg.equals("-s"))
76                     receiveFile = false;
77                 else if (arg.equals("-a"))
78                     transferMode = TFTP.ASCII_MODE;
79                 else if (arg.equals("-b"))
80                     transferMode = TFTP.BINARY_MODE;
81                 else
82                 {
83                     System.err.println("Error: unrecognized option.");
84                     System.err.print(USAGE);
85                     System.exit(1);
86                 }
87             }
88             else
89                 break;
90         }
91
92         // Make sure there are enough arguments
93
if (args.length - argc != 3)
94         {
95             System.err.println("Error: invalid number of arguments.");
96             System.err.print(USAGE);
97             System.exit(1);
98         }
99
100         // Get host and file arguments
101
hostname = args[argc];
102         localFilename = args[argc + 1];
103         remoteFilename = args[argc + 2];
104
105         // Create our TFTP instance to handle the file transfer.
106
tftp = new TFTPClient();
107
108         // We want to timeout if a response takes longer than 60 seconds
109
tftp.setDefaultTimeout(60000);
110
111         // Open local socket
112
try
113         {
114             tftp.open();
115         }
116         catch (SocketException JavaDoc e)
117         {
118             System.err.println("Error: could not open local UDP socket.");
119             System.err.println(e.getMessage());
120             System.exit(1);
121         }
122
123         // We haven't closed the local file yet.
124
closed = false;
125
126         // If we're receiving a file, receive, otherwise send.
127
if (receiveFile)
128         {
129             FileOutputStream JavaDoc output = null;
130             File JavaDoc file;
131
132             file = new File JavaDoc(localFilename);
133
134             // If file exists, don't overwrite it.
135
if (file.exists())
136             {
137                 System.err.println("Error: " + localFilename + " already exists.");
138                 System.exit(1);
139             }
140
141             // Try to open local file for writing
142
try
143             {
144                 output = new FileOutputStream JavaDoc(file);
145             }
146             catch (IOException JavaDoc e)
147             {
148                 tftp.close();
149                 System.err.println("Error: could not open local file for writing.");
150                 System.err.println(e.getMessage());
151                 System.exit(1);
152             }
153
154             // Try to receive remote file via TFTP
155
try
156             {
157                 tftp.receiveFile(remoteFilename, transferMode, output, hostname);
158             }
159             catch (UnknownHostException JavaDoc e)
160             {
161                 System.err.println("Error: could not resolve hostname.");
162                 System.err.println(e.getMessage());
163                 System.exit(1);
164             }
165             catch (IOException JavaDoc e)
166             {
167                 System.err.println(
168                     "Error: I/O exception occurred while receiving file.");
169                 System.err.println(e.getMessage());
170                 System.exit(1);
171             }
172             finally
173             {
174                 // Close local socket and output file
175
tftp.close();
176                 try
177                 {
178                     output.close();
179                     closed = true;
180                 }
181                 catch (IOException JavaDoc e)
182                 {
183                     closed = false;
184                     System.err.println("Error: error closing file.");
185                     System.err.println(e.getMessage());
186                 }
187             }
188
189             if (!closed)
190                 System.exit(1);
191
192         }
193         else
194         {
195             // We're sending a file
196
FileInputStream JavaDoc input = null;
197
198             // Try to open local file for reading
199
try
200             {
201                 input = new FileInputStream JavaDoc(localFilename);
202             }
203             catch (IOException JavaDoc e)
204             {
205                 tftp.close();
206                 System.err.println("Error: could not open local file for reading.");
207                 System.err.println(e.getMessage());
208                 System.exit(1);
209             }
210
211             // Try to send local file via TFTP
212
try
213             {
214                 tftp.sendFile(remoteFilename, transferMode, input, hostname);
215             }
216             catch (UnknownHostException JavaDoc e)
217             {
218                 System.err.println("Error: could not resolve hostname.");
219                 System.err.println(e.getMessage());
220                 System.exit(1);
221             }
222             catch (IOException JavaDoc e)
223             {
224                 System.err.println(
225                     "Error: I/O exception occurred while sending file.");
226                 System.err.println(e.getMessage());
227                 System.exit(1);
228             }
229             finally
230             {
231                 // Close local socket and input file
232
tftp.close();
233                 try
234                 {
235                     input.close();
236                     closed = true;
237                 }
238                 catch (IOException JavaDoc e)
239                 {
240                     closed = false;
241                     System.err.println("Error: error closing file.");
242                     System.err.println(e.getMessage());
243                 }
244             }
245
246             if (!closed)
247                 System.exit(1);
248
249         }
250
251     }
252
253 }
254
255
256
Popular Tags