A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ninjaes 中级黑马   /  2016-1-12 16:50  /  1066 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

客户端        
        Socket s=new Socket("本机IP",55568);
                BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
                PrintWriter out=new PrintWriter(s.getOutputStream(),true);
                BufferedReader bufi=new BufferedReader(new InputStreamReader(s.getInputStream()));
                for(int x=0;x<10;x++)
                {
                        String line=bufr.readLine();
                        
                        out.println(line);
                        
                        String info=bufi.readLine();
                         if(info.contains("huangying"))
                                break;
                        System.out.println(info);
                  
                }
                bufr.close();
                s.close();
        }
服务端
      ServerSocket sert=new ServerSocket(55568);
      while(true)
      {
              Socket s=sert.accept();
              new Thread(new Usert(s)).start();
      }
   
                }        
         

class Usert  implements  Runnable
{   
        private Socket s;
        Usert(Socket s)
        {
         this.s=s;
        }
        public void run()
        {
                String ip=s.getInetAddress().getHostAddress();
                try
                {
                        for(int x=0;x<10;x++)
                        {
                                BufferedReader bufre=new BufferedReader(new InputStreamReader(s.getInputStream()));
                                String name=bufre.readLine();
                                if(name==null)
                                        break;
                                BufferedReader bufin=new BufferedReader(new FileReader("use.txt"));
                                PrintWriter out=new PrintWriter(s.getOutputStream(),true);
                                String line=null;
                                boolean flag=false;
                                while((line=bufin.readLine())!=null)
                                {
                                        if(line.equals(name))
                                        {
                                                flag=true;
                                                break;
                                        }
                                }
                                if(flag)
                                {
                                        System.out.println(name+"yidonglu");
                                        out.println("huanying"+name);
                                        break;
                                }
                                else
                                {
                                        System.out.println("no access"+name);
                                        out.println("bucunzai");
                                }
                                
                                
                        }
               
                        s.close();
                }
                catch(Exception e)
                {
                        throw new RuntimeException("shibai "+ip);
                }
        }
}


use.txt的内容  
zhangsan
lisi
wangwu
maxliu
kkk

问题是 为什么我输入lisi就是bucunzai呢   
kkk
huanyingkkk
lisi
Exception in thread "main" java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:170)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.io.BufferedReader.readLine(BufferedReader.java:324)
        at java.io.BufferedReader.readLine(BufferedReader.java:389)
        at helloword.Test15.main(Test15.java:106)
java 106 指的是  客户端的 :String info=bufi.readLine();

3 个回复

倒序浏览
求大神们 给解释一下呀
回复 使用道具 举报
学习                  
回复 使用道具 举报
客户机<-->服务器,之间是由一个socket长连接来通信,客户端有一个接收线程在while(true){..}循环里不停地从InputStream流中读数据,客户机每隔几秒钟发一次心跳包至服务端,如果连续未收到心跳包响应的次数已达到规定的次数,客户机认为此链路异常,将socket关闭,那么服务器会抛出java.net.SocketException:Connection reset by peer异常,然后分配给此socket连接的线程退出,那么客户端在while(true){..}循环,读取流时便会发java.net.SocketException: Software causedconnection abort: recv failed异常。

希望对你有帮助。可以多看看错误信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马