Socket对象以及异常

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);
    }
}

 

posted @ 2018-01-13 21:56  大佛拈花-GoSaint  阅读(253)  评论(0编辑  收藏  举报