zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性
    序列化二叉树
    把二叉树打印成多行
    按之字形顺序打印二叉树
    对称的二叉树
    JDK源码阅读顺序
    二叉树的下一个结点
    删除链表中重复的结点
    链表中环的入口结点
    字符流中第一个不重复的字符
  • 原文地址:https://www.cnblogs.com/gosaint/p/8280655.html
Copyright © 2011-2022 走看看