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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王陶成 中级黑马   /  2012-9-15 18:43  /  1569 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写了一下客户端登陆的程序,麻烦给看一下哪里出的问题


客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class LoginClient {
        public static void main(String[] args) throws IOException {
                Socket s = new Socket("localhost", 8000);
               
                BufferedReader bufr =
                        new BufferedReader(new InputStreamReader(System.in));
               
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);               
                BufferedReader bufIn =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
               
                for(int x=0; x<3; x++) {
                        //发送信息
                        String line = bufr.readLine();
                        if(line == null)
                                break;
                        out.println(line);
                       
                        //显示服务器端反馈
                        String info = bufIn.readLine();

                        System.out.println("info : " + info);
//info是服务器端发过来的信息,为什么是null呢
                       
                        if(info.contains("欢迎"))
//在这一句报出 空指针异常
                                break;
                }
               
                bufr.close();
                s.close();
        }
}


服务器端

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class UserThread implements Runnable {
        private Socket s;
        public UserThread(Socket s) {
                this.s = s;
        }
       
        public void run() {
                String ip = s.getInetAddress().getHostAddress();
                System.out.println("------ " + ip + " connected -------");
                try {
                        for(int i=0; i<3; i++) {
                                BufferedReader bufIn =
                                        new BufferedReader(new InputStreamReader(s.getInputStream()));
                                String name = bufIn.readLine();
                               
                                BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
                                PrintWriter out = new PrintWriter(s.getOutputStream());

                                boolean flag =false;
                               
                                String line = null;
                                while((line = bufr.readLine()) != null) {
                                        if(line.equals(name)) {
                                                flag = true;
                                                break;
                                        }
                                }
                               
                                if(flag) {//如果flag为true
                                        System.out.println(name + ", 已登录");
                                        out.print(name + ", 欢迎光临");
                                        break;
                                } else {
                                        System.out.println(name + ", 尝试登录");
                                        out.println(name + ", 用户名不存在");
                                }
                        }
                        s.close();
                } catch (Exception e) {
                        throw new RuntimeException(ip + "校验失败");
                }
        }
       
}

public class LoginServer {
        public static void main(String[] args) throws IOException {
                ServerSocket ss = new ServerSocket(8000);
               
                while(true) {
                        Socket s = ss.accept();
                       
                        new Thread(new UserThread(s)).start();
                }
        }
}


user.txt的内容
diyige
dierge
disange




评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
代码没仔细看 不过我估计  是这样出问题了  你看下 PrintWriter out = new PrintWriter(s.getOutputStream(),true);你少了自动刷新动作
回复 使用道具 举报
仔细研究过你的代码后,你应该用PrintWriter out = new PrintWriter(s.getOutputStream(),true);在printerwriter中有缓冲的,你每次写入的东西,先是写进了缓冲区了,你应该先刷新一下缓冲区才可以让它写出去的
回复 使用道具 举报
补充一下:
public class PrintWriter extends Writer向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。
  与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。
  此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
我按你你什么说的改了,可是问题还有,还是空指针异常啊
回复 使用道具 举报
我按你你们说的改了,可是问题还有,还是空指针异常啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马