黑马程序员技术交流社区
标题:
网络编程问题
[打印本页]
作者:
王陶成
时间:
2012-9-15 18:43
标题:
网络编程问题
写了一下客户端登陆的程序,麻烦给看一下哪里出的问题
客户端:
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
作者:
朱烈葵
时间:
2012-9-15 20:00
代码没仔细看 不过我估计 是这样出问题了 你看下 PrintWriter out = new PrintWriter(s.getOutputStream(),true);你少了自动刷新动作
作者:
史小兵
时间:
2012-9-15 20:18
仔细研究过你的代码后,你应该用PrintWriter out = new PrintWriter(s.getOutputStream(),true);在printerwriter中有缓冲的,你每次写入的东西,先是写进了缓冲区了,你应该先刷新一下缓冲区才可以让它写出去的
作者:
史小兵
时间:
2012-9-15 20:29
补充一下:
public class PrintWriter extends Writer向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。
与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。
此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。
作者:
王陶成
时间:
2012-9-15 21:52
我按你你什么说的改了,可是问题还有,还是空指针异常啊
作者:
王陶成
时间:
2012-9-15 21:53
我按你你们说的改了,可是问题还有,还是空指针异常啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2