1 /*
2 * Copyright 2009 Red Hat, Inc.
3 *
4 * Red Hat licenses this file to you under the Apache License, version 2.0
5 * (the "License"); you may not use this file except in compliance with the
6 * License. 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, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package org.jboss.netty.example.discard;
17
18 import java.net.InetSocketAddress;
19 import java.util.concurrent.Executors;
20
21 import org.jboss.netty.bootstrap.ClientBootstrap;
22 import org.jboss.netty.channel.ChannelFuture;
23 import org.jboss.netty.channel.ChannelPipeline;
24 import org.jboss.netty.channel.ChannelPipelineFactory;
25 import org.jboss.netty.channel.Channels;
26 import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
27
28 /**
29 * Keeps sending random data to the specified address.
30 *
31 * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
32 * @author <a href="http://gleamynode.net/">Trustin Lee</a>
33 *
34 * @version $Rev: 2080 $, $Date: 2010-01-26 18:04:19 +0900 (Tue, 26 Jan 2010) $
35 */
36 public class DiscardClient {
37
38 public static void main(String[] args) throws Exception {
39 // Print usage if no argument is specified.
40 if (args.length < 2 || args.length > 3) {
41 System.err.println(
42 "Usage: " + DiscardClient.class.getSimpleName() +
43 " <host> <port> [<first message size>]");
44 return;
45 }
46
47 // Parse options.
48 final String host = args[0];
49 final int port = Integer.parseInt(args[1]);
50 final int firstMessageSize;
51 if (args.length == 3) {
52 firstMessageSize = Integer.parseInt(args[2]);
53 } else {
54 firstMessageSize = 256;
55 }
56
57 // Configure the client.
58 ClientBootstrap bootstrap = new ClientBootstrap(
59 new NioClientSocketChannelFactory(
60 Executors.newCachedThreadPool(),
61 Executors.newCachedThreadPool()));
62
63 // Set up the pipeline factory.
64 bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
65 public ChannelPipeline getPipeline() throws Exception {
66 return Channels.pipeline(
67 new DiscardClientHandler(firstMessageSize));
68 }
69 });
70
71 // Start the connection attempt.
72 ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
73
74 // Wait until the connection is closed or the connection attempt fails.
75 future.getChannel().getCloseFuture().awaitUninterruptibly();
76
77 // Shut down thread pools to exit.
78 bootstrap.releaseExternalResources();
79 }
80 }