1 socket构造器:
public Socket() | 创建一个Socket套接字 |
public Socket(InetAddress address,int port) | 创建一个指定IP和端口的套接字 |
Socket(InetAddress address, int port, InetAddress localAddr, int localPort) | 创建一个指定IP和端口的套接字;并将其和指定的远程端口连接起来 |
Socket(Proxy proxy) | 创建一个指定代理的套接字 |
Socket(SocketImpl impl) | 创建一个用户指定的套接字 |
Socket(String host, int port) | 创建一个IP和端口的套接字 |
Socket(String host, int port, InetAddress localAddr, int localPort) |
·1 public Socket()构造器:
创建一个Socket对象,并且连接指定的socket地址;设置连接的超时时间为60s;
package com.asiaInfo.caozg.ch_01; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; /** * @Authgor: gosaint * @Description: * @Date Created in 14:55 2018/1/13 * @Modified By:socket相关的构造方法 */ public class SocketContructor { public static void main(String[] args) throws IOException{ Socket socket=new Socket(); // 设置连接的端口和ip SocketAddress address=new InetSocketAddress("localhost",8000); // 连接指定的socketAddress,并且设置超时时间 socket.connect(address,60000); } }
接下来我们看看connetc()方法;
public void connect(SocketAddress endpoint,int timeout)throws IOException
SocketAddress 这个类代表一个没有协议附件的套接字地址。作为一个抽象类,它应该是一个具体的子类实现。 很显然,在上述的代码中:InetSocketAddress就是SocketAddress的实现类,并且指定了socket连接的地址:localhost 8000。timeout为超时时间,单位ms.如果60s内连接不上,就是报相关的异常;
·2 java.net.ConnectException: Connection refused: connect
连接拒绝异常:就是上述代码,不可以连接这个指定的地址;
package com.asiaInfo.caozg.ch_01; import java.io.IOException; import java.net.*; /** * @Authgor: gosaint * @Description: * @Date Created in 15:09 2018/1/13 * @Modified By:socket的常见异常 */ public class IOExceptionSocket { public static void main(String[] args) { String host="localhost"; int port=25; // 如果数组的长度大于1,那么将第一个元素赋值给host,第二个元素赋值给port if(args.length>1){ host=args[0]; port=Integer.parseInt(args[1]); } System.out.println("=========="); new IOExceptionSocket().connect(host,port); } private void connect(String host, int port) { //根据传递的host和port构建连接的地址 SocketAddress address=new InetSocketAddress(host,port); Socket socket=null; String result=""; try { long begin=System.currentTimeMillis();//开始连接时间 socket=new Socket(); socket.connect(address,20000); long end=System.currentTimeMillis();//结束时间 result=(end-begin)+"ms"; }catch (BindException e){ result="本地地址和端口绑定异常"; }catch (UnknownHostException e){ result="不知道的端口异常"; }catch (ConnectException e){ result="连接异常"; }catch (SocketTimeoutException e){ result="连接超时异常"; }catch (IOException e){ result="IO异常"; }finally { try { if(socket!=null)socket.close(); }catch (IOException e){ e.printStackTrace(); } } System.out.println(address+":"+result); } }