public class JabberServer {
public static final int PORT = 8088;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(PORT);
System.out.println("Started" + s);
try {
Socket socket = s.accept();
try {
System.out.println("Connection accepted" + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
while (true) {
String str = in.readLine();
if (str.equals("END"))
break;
System.out.println("Echoing:" + str);
out.println(str);
}
} finally {
System.out.println("Closing...........");
socket.close();
}
} finally {
s.close();
}
}
}public class JabberClient {
public static void main(String[] args) throws IOException {
InetAddress add = InetAddress.getByName(null);
System.out.println("add=" + add);
Socket socket = new Socket(add, JabberServer.PORT);
try {
System.out.println("Socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())));
for (int i = 0; i < 10; i++) {
out.println("howdy" + i);
String str = in.readLine();
System.out.println(str);
}
out.println("END");
} finally {
System.out.println("Closing.............");
socket.close();
}
}
}
JabberServer程序链接能成功,但是这个循环里的东西打印不出来。
while (true) {
String str = in.readLine();
if (str.equals("END"))
break;
System.out.println("Echoing:" + str);
out.println(str);
}
JabberClient程序链接能成功,但是这个循环里的东西打印不出来。
for (int i = 0; i < 10; i++) {
out.println("howdy" + i);
String str = in.readLine();
System.out.println(str);
}
为什么,请大家指点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    public class JabberClient {
    public static void main(String[] args) throws IOException {
    InetAddress add = InetAddress.getByName(null);
    System.out.println("add=" + add);
    Socket socket = new Socket(add, JabberServer.PORT);
    try {
    System.out.println("Socket = " + socket);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket
    .getInputStream()));
    PrintWriter out = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream())));
    for (int i = 0; i < 10; i++) {
    out.println("howdy" + i);
    out.flush();//;加上
    String str = in.readLine();
    System.out.println("from server"+str);
    }
    out.println("END");
    out.flush();  //加上
    } finally {
    System.out.println("Closing.............");
    socket.close();  
    }
    }
    }因为PrintWriter是有缓冲的
    你的数据没有输出 所以读不到加上就可以 Server没有问题,因为你的PrintWriter out = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream())), true);
    //true表示每行都会自动清空缓冲