下面是我写的一个server,当客户端向其发送校消息 时  第一次发送消息 ,利用 System.out.println(in.readUTF());屏幕输出 信息,但是客户端却收不到,第二次发送消息 屏幕不输出 信息,但是 客户端却可以收到。但是我把System.out.println(in.readUTF());注释掉后客户端每次都可以收到消息了!!!!为什么???
public class server extends JFrame {
   ServerSocket server;
   Socket client;
public server() {
setSize(500, 500);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container con = getContentPane();
JButton jb = new JButton("dsa");
con.add(jb);
setVisible(true);
try {
server = new ServerSocket(65521);
 while (true) {
client = server.accept();
new talkThread(client).start();
}
} catch (Exception e) {
e.getStackTrace();
}
}
public static void main(String[] args) {
server s = new server();
}
class talkThread extends Thread {
private Socket client1;
public talkThread(Socket client) 
{
client1 = client;
}
public void run() {
try {
DataInputStream  in = new DataInputStream(client1.getInputStream()); DataOutputStream out = new DataOutputStream(client1.getOutputStream());
while (true) {
 
  System.out.println(in.readUTF());
out.writeUTF(in.readUTF());
out.flush(); 
}
} catch (Exception e2) {
e2.getStackTrace();
}
}
}
 }

解决方案 »

  1.   

    只看了其中一部分try {
    DataInputStream  in = new DataInputStream(client1.getInputStream());DataOutputStream out = new DataOutputStream(client1.getOutputStream());
    while (true) {  System.out.println(in.readUTF());
    out.writeUTF(in.readUTF());
    out.flush();
    } 我觉得应该这样
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    DataInputStream  in = new DataInputStream(client1.getInputStream());
    DataOutputStream out = new DataOutputStream(client1.getOutputStream());
    while (true) {  System.out.println(in.readUTF());
      out.writeUTF(br.readLine());
      out.flush();
    }