开发者社区> 问答> 正文

socket监听输入流怎么关闭

用java写的,socket连接后另开一个线程实时监听输入流,但是如果服务器那边发生异常中断了,我这边也利用心跳机制知道有异常,需要断掉socket重新连,但是监听输入流的线程就卡在read的那个方法里了,怎么才能从那个read的阻塞里出来呢?

展开
收起
蛮大人123 2016-06-07 18:12:44 2406 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    import java.net.*;
    import java.io.*;
    
    public class Server{
    public static void main(String[] args){
    
        InputStream in=null;
        OutputStream out=null;
        try{
            ServerSocket ss=new ServerSocket(8888);
            Socket socket=ss.accept();
            in=socket.getInputStream();
            out=socket.getOutputStream();
            DataOutputStream dos=new DataOutputStream(out);
            DataInputStream dis=new DataInputStream(in);
            String s=null;
            if((s=dis.readUTF())!=null){
                System.out.println(s);
            }
            /*
            System.out.println(dis.readUTF())
            */
    
            String fileContent = readFileContent("E:\\LQ.txt");;
            dos.writeUTF(fileContent);
            dis.close();
            dos.close();
            socket.close();
        }catch(IOException e) {
            e.printStackTrace();
        }
    
     }
    
    private static String readFileContent(String fileName) throws IOException {
        File file = new File(fileName);
        BufferedReader bf = new BufferedReader(new FileReader(file));
        String content = "";
        StringBuilder sb = new StringBuilder();
        while(content != null){
            content = bf.readLine();
            if(content == null){
                break;
            }
            sb.append(content.trim());
        }
        bf.close();
        return sb.toString();
    }
    }
    
    import java.net.*;
    import java.io.*;
    
    public class Client{
    public static void main(String[] args){
    
        InputStream is=null;
        OutputStream os=null;
        try{
            Socket socket=new Socket("localhost",8888);
            is=socket.getInputStream();
            os=socket.getOutputStream();
            DataInputStream dis=new DataInputStream(is);
            DataOutputStream dos=new DataOutputStream(os);
            dos.writeUTF("hello");
            String s=null;
            if((s=dis.readUTF())!=null);
            System.out.println(s);
            dis.close();
            dos.close();
            socket.close();
        }catch(IOException e) {e.printStackTrace();}
    }
    }
    2019-07-17 19:30:38
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载