一个简单的Java Socket通信程序,收发消息都是正常的,就是每次发送结束的时候会在最后输出一个“null”,然后抛出异常。比如:
server ok
************************************************
123 456 789 987 654 321
null
Error:java.lang.NullPointerExceptionimport java.net.*;
import java.io.*;
import java.lang.*;
public class server {
@SuppressWarnings("deprecation")
public static void main(String args[]) {
ServerSocket server;
Socket socket;
String s;
InputStream Is;
DataInputStream DIS; try {
server = new ServerSocket(9000);
socket = server.accept(); System.out.println("server ok");
System.out.println("************************************************");
Is = socket.getInputStream();
DIS = new DataInputStream(Is);
while (true) {
s = DIS.readLine();
System.out.println(s);
if (s.trim().equals("BYE"))break;
}
DIS.close();
Is.close();
socket.close();
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
}
server ok
************************************************
123 456 789 987 654 321
null
Error:java.lang.NullPointerExceptionimport java.net.*;
import java.io.*;
import java.lang.*;
public class server {
@SuppressWarnings("deprecation")
public static void main(String args[]) {
ServerSocket server;
Socket socket;
String s;
InputStream Is;
DataInputStream DIS; try {
server = new ServerSocket(9000);
socket = server.accept(); System.out.println("server ok");
System.out.println("************************************************");
Is = socket.getInputStream();
DIS = new DataInputStream(Is);
while (true) {
s = DIS.readLine();
System.out.println(s);
if (s.trim().equals("BYE"))break;
}
DIS.close();
Is.close();
socket.close();
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
}
所以 s.trim 抛出NullPointException了
客户端没有输入“BYE”就关闭了。可以在程序加入空字符串检测。……
while (true) {
s = DIS.readLine();
if (s == null || s.trim().equals("BYE"))break;
System.out.println(s);
}
……