01: /*
02: * Copyright 2001-2005 The Apache Software Foundation
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
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 org.apache.commons.net;
17:
18: import java.io.IOException;
19: import java.net.DatagramPacket;
20: import java.net.InetAddress;
21:
22: /***
23: * The EchoUDPClient class is a UDP implementation of a client for the
24: * Echo protocol described in RFC 862. To use the class,
25: * just open a local UDP port
26: * with {@link org.apache.commons.net.DatagramSocketClient#open open }
27: * and call {@link #send send } to send datagrams to the server,
28: * then call {@link #receive receive } to receive echoes.
29: * After you're done echoing data, call
30: * {@link org.apache.commons.net.DatagramSocketClient#close close() }
31: * to clean up properly.
32: * <p>
33: * <p>
34: * @author Daniel F. Savarese
35: * @see EchoTCPClient
36: * @see DiscardUDPClient
37: ***/
38:
39: public final class EchoUDPClient extends DiscardUDPClient {
40: /*** The default echo port. It is set to 7 according to RFC 862. ***/
41: public static final int DEFAULT_PORT = 7;
42:
43: private DatagramPacket __receivePacket = new DatagramPacket(
44: new byte[0], 0);
45:
46: /***
47: * Sends the specified data to the specified server at the default echo
48: * port.
49: * <p>
50: * @param data The echo data to send.
51: * @param length The length of the data to send. Should be less than
52: * or equal to the length of the data byte array.
53: * @param host The address of the server.
54: * @exception IOException If an error occurs during the datagram send
55: * operation.
56: ***/
57: public void send(byte[] data, int length, InetAddress host)
58: throws IOException {
59: send(data, length, host, DEFAULT_PORT);
60: }
61:
62: /*** Same as <code> send(data, data.length, host) </code> ***/
63: public void send(byte[] data, InetAddress host) throws IOException {
64: send(data, data.length, host, DEFAULT_PORT);
65: }
66:
67: /***
68: * Receives echoed data and returns its length. The data may be divided
69: * up among multiple datagrams, requiring multiple calls to receive.
70: * Also, the UDP packets will not necessarily arrive in the same order
71: * they were sent.
72: * <p>
73: * @return Length of actual data received.
74: * @exception IOException If an error occurs while receiving the data.
75: ***/
76: public int receive(byte[] data, int length) throws IOException {
77: __receivePacket.setData(data);
78: __receivePacket.setLength(length);
79: _socket_.receive(__receivePacket);
80: return __receivePacket.getLength();
81: }
82:
83: /*** Same as <code> receive(data, data.length)</code> ***/
84: public int receive(byte[] data) throws IOException {
85: return receive(data, data.length);
86: }
87:
88: }
|