• socket通信之eofexception


    方案一:
        用read()将不会抛出异常。因为read是block方式的。
        readInt()抛出异常的原因(我遇到的)是对方在该端口没有消息发送。
    
    方案二:
        socket的端口被阻塞了 ,也就是我们需要更换端口号来解决.
    
    方案三:
        在初始化链接时,如果先创建输入流,再创建输出流可能会报错,正确创建顺序如下:
    
        ObjectOutputStream   output=new   ObjectOutputStream(socket.getOutputStream()); 
        ObjectInputStream   input=new   ObjectInputStream(socket.getInputStream()); 
    
    方案四:
    从上面的提示可以模糊看到,因为不知道流的末尾,当到达末尾的时候,自然抛出了此异常。既然不知道结尾如何,干脆设一个缓存,然后读取一批数据后输出即可。
    为了保险期间,可以讲此缓存设置大点,一次可以完全接收到想要的内容,这样,一次就可以读取到所要的内容了,避免了循环获取。下面将此代码放出来:
            ...... 
    
            private static final int BUFFER_SIZE=1024*1024; 
             
            ...... 
    
            Socket socket = new Socket(cfg.getIp(), Integer.parseInt(SysParamsToolkit.getProperty("socketport"))); 
            String charset = SysParamsToolkit.getProperty("socke.rexml.charset");     //Socket发送的字符集编码 
            try { 
                    OutputStream dos = socket.getOutputStream(); 
                    dos.write(xmlcmd.getBytes(charset)); 
                    dos.flush(); 
                    DataInputStream dis = new DataInputStream(socket.getInputStream()); 
                    char[] data = new char[BUFFER_SIZE]; 
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), charset)); 
                    int len = br.read(data); 
                    String rexml = String.valueOf(data, 0, len);        //接收一个字符串数据 
            } catch (Exception e) { 
                    return false; 
            } finally { 
                    if (socket.isConnected()) 
                            socket.close(); 
            } 
            ...... 
     
    经过上面的处理后,就没问题了。
     
    缓存的大小BUFFER_SIZE是根据你要接收内容的大小来确定。
  • 相关阅读:
    MFC绘制直角坐标系
    mfc画波形函数
    ciscn_2019_ne_5
    ciscn_2019_n_5
    [ZJCTF 2019]NiZhuanSiWei
    ciscn_2019_n_1
    pwn-100
    2014提高组笔试错题
    BZOJ3211: 花神游历各国
    主席树模板
  • 原文地址:https://www.cnblogs.com/sprinng/p/6100397.html
Copyright © 2020-2023  润新知