StandardSocketFactory.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.net;
  19. import java.io.IOException;
  20. import java.net.InetAddress;
  21. import java.net.InetSocketAddress;
  22. import java.net.Socket;
  23. import java.net.UnknownHostException;
  24. import java.nio.channels.SocketChannel;
  25. import javax.net.SocketFactory;
  26. /**
  27.  * Specialized SocketFactory to create sockets with a SOCKS proxy
  28.  */
  29. public class StandardSocketFactory extends SocketFactory {
  30.   /**
  31.    * Default empty constructor (for use with the reflection API).
  32.    */
  33.   public StandardSocketFactory() {
  34.   }
  35.   /* @inheritDoc */
  36.   @Override
  37.   public Socket createSocket() throws IOException {
  38.     /*
  39.      * NOTE: This returns an NIO socket so that it has an associated 
  40.      * SocketChannel. As of now, this unfortunately makes streams returned
  41.      * by Socket.getInputStream() and Socket.getOutputStream() unusable
  42.      * (because a blocking read on input stream blocks write on output stream
  43.      * and vice versa).
  44.      * 
  45.      * So users of these socket factories should use 
  46.      * NetUtils.getInputStream(socket) and 
  47.      * NetUtils.getOutputStream(socket) instead.
  48.      * 
  49.      * A solution for hiding from this from user is to write a 
  50.      * 'FilterSocket' on the lines of FilterInputStream and extend it by
  51.      * overriding getInputStream() and getOutputStream().
  52.      */
  53.     return SocketChannel.open().socket();
  54.   }
  55.   /* @inheritDoc */
  56.   @Override
  57.   public Socket createSocket(InetAddress addr, int port) throws IOException {
  58.     Socket socket = createSocket();
  59.     socket.connect(new InetSocketAddress(addr, port));
  60.     return socket;
  61.   }
  62.   /* @inheritDoc */
  63.   @Override
  64.   public Socket createSocket(InetAddress addr, int port,
  65.       InetAddress localHostAddr, int localPort) throws IOException {
  66.     Socket socket = createSocket();
  67.     socket.bind(new InetSocketAddress(localHostAddr, localPort));
  68.     socket.connect(new InetSocketAddress(addr, port));
  69.     return socket;
  70.   }
  71.   /* @inheritDoc */
  72.   @Override
  73.   public Socket createSocket(String host, int port) throws IOException,
  74.       UnknownHostException {
  75.     Socket socket = createSocket();
  76.     socket.connect(new InetSocketAddress(host, port));
  77.     return socket;
  78.   }
  79.   /* @inheritDoc */
  80.   @Override
  81.   public Socket createSocket(String host, int port,
  82.       InetAddress localHostAddr, int localPort) throws IOException,
  83.       UnknownHostException {
  84.     Socket socket = createSocket();
  85.     socket.bind(new InetSocketAddress(localHostAddr, localPort));
  86.     socket.connect(new InetSocketAddress(host, port));
  87.     return socket;
  88.   }
  89.   /* @inheritDoc */
  90.   @Override
  91.   public boolean equals(Object obj) {
  92.     if (this == obj)
  93.       return true;
  94.     if (obj == null)
  95.       return false;
  96.     if (!(obj instanceof StandardSocketFactory))
  97.       return false;
  98.     return true;
  99.   }
  100.   /* @inheritDoc */
  101.   @Override
  102.   public int hashCode() {
  103.     // Dummy hash code (to make find bugs happy)
  104.     return 47;
  105.   } 
  106.   
  107. }