001 /* 002 * Copyright 2001-2005 The Apache Software Foundation 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package examples; 017 018 import java.io.BufferedReader; 019 import java.io.IOException; 020 import java.io.InputStreamReader; 021 import java.io.InterruptedIOException; 022 import java.io.OutputStreamWriter; 023 import java.io.PrintWriter; 024 import java.net.InetAddress; 025 import java.net.SocketException; 026 import org.apache.commons.net.EchoTCPClient; 027 import org.apache.commons.net.EchoUDPClient; 028 029 /*** 030 * This is an example program demonstrating how to use the EchoTCPClient 031 * and EchoUDPClient classes. This program connects to the default echo 032 * service port of a specified server, then reads lines from standard 033 * input, writing them to the echo server, and then printing the echo. 034 * The default is to use the TCP port. Use the -udp flag to use the UDP 035 * port. 036 * <p> 037 * Usage: echo [-udp] <hostname> 038 * <p> 039 ***/ 040 public final class echo 041 { 042 043 public static final void echoTCP(String host) throws IOException 044 { 045 EchoTCPClient client = new EchoTCPClient(); 046 BufferedReader input, echoInput; 047 PrintWriter echoOutput; 048 String line; 049 050 // We want to timeout if a response takes longer than 60 seconds 051 client.setDefaultTimeout(60000); 052 client.connect(host); 053 System.out.println("Connected to " + host + "."); 054 input = new BufferedReader(new InputStreamReader(System.in)); 055 echoOutput = 056 new PrintWriter(new OutputStreamWriter(client.getOutputStream()), true); 057 echoInput = 058 new BufferedReader(new InputStreamReader(client.getInputStream())); 059 060 while ((line = input.readLine()) != null) 061 { 062 echoOutput.println(line); 063 System.out.println(echoInput.readLine()); 064 } 065 066 client.disconnect(); 067 } 068 069 public static final void echoUDP(String host) throws IOException 070 { 071 int length, count; 072 byte[] data; 073 String line; 074 BufferedReader input; 075 InetAddress address; 076 EchoUDPClient client; 077 078 input = new BufferedReader(new InputStreamReader(System.in)); 079 address = InetAddress.getByName(host); 080 client = new EchoUDPClient(); 081 082 client.open(); 083 // If we don't receive an echo within 5 seconds, assume the packet is lost. 084 client.setSoTimeout(5000); 085 System.out.println("Ready to echo to " + host + "."); 086 087 // Remember, there are no guarantees about the ordering of returned 088 // UDP packets, so there is a chance the output may be jumbled. 089 while ((line = input.readLine()) != null) 090 { 091 data = line.getBytes(); 092 client.send(data, address); 093 count = 0; 094 do 095 { 096 try 097 { 098 length = client.receive(data); 099 } 100 // Here we catch both SocketException and InterruptedIOException, 101 // because even though the JDK 1.1 docs claim that 102 // InterruptedIOException is thrown on a timeout, it seems 103 // SocketException is also thrown. 104 catch (SocketException e) 105 { 106 // We timed out and assume the packet is lost. 107 System.err.println( 108 "SocketException: Timed out and dropped packet"); 109 break; 110 } 111 catch (InterruptedIOException e) 112 { 113 // We timed out and assume the packet is lost. 114 System.err.println( 115 "InterruptedIOException: Timed out and dropped packet"); 116 break; 117 } 118 System.out.print(new String(data, 0, length)); 119 count += length; 120 } 121 while (count < data.length); 122 123 System.out.println(); 124 } 125 126 client.close(); 127 } 128 129 130 public static final void main(String[] args) 131 { 132 133 if (args.length == 1) 134 { 135 try 136 { 137 echoTCP(args[0]); 138 } 139 catch (IOException e) 140 { 141 e.printStackTrace(); 142 System.exit(1); 143 } 144 } 145 else if (args.length == 2 && args[0].equals("-udp")) 146 { 147 try 148 { 149 echoUDP(args[1]); 150 } 151 catch (IOException e) 152 { 153 e.printStackTrace(); 154 System.exit(1); 155 } 156 } 157 else 158 { 159 System.err.println("Usage: echo [-udp] <hostname>"); 160 System.exit(1); 161 } 162 163 } 164 165 } 166