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