新手。。
学习聊天室程序
编译通过。
但是两端都只能发信息。。收不到任何信息。。
为什么呢?import java.io.*;
import java.net.*;public class ChartServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(1985);
Socket s = ss.accept();
InputStream serverIn = s.getInputStream();
OutputStream serverOut = s.getOutputStream();
new ServerReader(serverIn).start();
new ServerWriter(serverOut).start();
} catch(Exception e) {
e.printStackTrace();
}
  }

}class ServerReader extends Thread {
ServerReader(InputStream aIn) {
in = aIn;
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while(true) {
System.out.println("对方说:" + br.readLine());
}
} catch(IOException e) {
e.printStackTrace();
} }
private InputStream in;

}class ServerWriter extends Thread {
ServerWriter(OutputStream aOut) {
out = aOut;
}
public void run() {
try{
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(in);
String info;
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
while(true) {
info = br.readLine();
bw.write(info);
bw.flush();
}
} catch(IOException e) {
e.printStackTrace();
} }
private OutputStream out;
}
import java.io.*;
import java.net.*;public class ChartClient {
public static void main(String[] args) {
System.out.println("欢迎进入简易聊天系统客户端");
try {
Socket s = new Socket("127.0.0.1",1985);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
new ClientWriter(out).start();
new ClientReader(in).start();

} catch(Exception e) {
e.printStackTrace();

}

}class ClientReader extends Thread {
ClientReader(InputStream aIn) {
in = aIn;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String info;
while(true) {
info = br.readLine();
System.out.println("服务器端说:" + info);
}
 } catch(Exception e) {
  e.printStackTrace();
 }
 }
private InputStream in;
}class ClientWriter extends Thread {
  ClientWriter(OutputStream aOut) {
   out = aOut;
  }
  public void run() {
   String info;
   try {
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
   while(true) {
   info = br.readLine();
   bw.write(info);
   bw.flush();
   }
   } catch(Exception e) {
   e.printStackTrace();
   }
  }
private OutputStream out;
}

解决方案 »

  1.   

    收不到任何信息。。
    问题你有没写方法把各方写的消息发到各个用户对话框上面显示我讲下思想:写一个方法用发发送消息给各个用户,方法里面最好是有List<User>的容器,以及取到IO流对象用于显示在对话框上面。。
    学到后面如何是学了JMS的话,写这个应该不难。
    本人比较懒,没看楼主的源码就回答问题了,见谅![近来心情不好]
      

  2.   

    逻辑十分混乱 两边都在等待~ 所以你收不到是因为你没发送 public class ServerImpl implements ServerService{ @Override
    public List userList() {
    // TODO Auto-generated method stub
    return null;
    } @Override
    public void userRegister() {
    try {

    int i = 1;
    ServerSocket s = new ServerSocket(9000);

    ServerActionController.getInstance().getFrame().getJConsoleTextArea().append("启动。。\n");

    /*采用循环来处理多个客户端连接的问题*/
    while(true){
    Socket client = s.accept();
    Runnable clientRunnable = new ThreadedRegHandle(client, i);
    Thread clientThread = new Thread(clientRunnable);
    clientThread.start();
    i++;
    }

    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    客户端:/*然后将信息通过socket,将用户信息发送到服务器端*/
    try {
    socket = new Socket(IP_ADDRESS,9000);

    Scanner in = new Scanner(socket.getInputStream());
    PrintWriter out=new PrintWriter(socket.getOutputStream());
    /*告诉服务器客户端需要的是注册服务*/
    out.println("login");
    out.flush();

    String userName = userNameTextField.getText();
    String userPassword = userPasswordField.getText();
    myUser.setUser_name(userName);
    out.println(userName);
    out.println(userPassword);
    out.flush();


    while(userState == null || userState.equals(""))
    userState = in.nextLine();
    }catch (UnknownHostException e1) {
    e1.printStackTrace();
    }catch (IOException e1) {
    e1.printStackTrace();
    }
      

  3.   

    可以改成这样,应该没问题
    ChatServer.javapackage server;import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class ChatServer {
    public static void main(String[] args) {
    try {
    ServerSocket ss = new ServerSocket(1985);
    Socket s = ss.accept();
    InputStream serverIn = s.getInputStream();
    OutputStream serverOut = s.getOutputStream();
    new ServerReader(serverIn).start();
    new ServerWriter(serverOut).start();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }}class ServerReader extends Thread {
    ServerReader(InputStream aIn) {
    in = aIn;
    } public void run() {
    try {
    DataInputStream dataInputStream = new DataInputStream(in);
    byte[] content=new byte[1000];
    while (true) {
    int count=dataInputStream.read(content);
    System.out.println("对方说:" + new String(content,0,count));
    }
    } catch (IOException e) {
    e.printStackTrace();
    } } private InputStream in;}class ServerWriter extends Thread {
    ServerWriter(OutputStream aOut) {
    out = aOut;
    } public void run() {
    try {
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(in);
    DataOutputStream dOutputStream=new DataOutputStream(out);
    String info;
    while (true) {
    info = br.readLine();
    dOutputStream.write(info.getBytes());
    dOutputStream.flush();
    }
    } catch (IOException e) {
    e.printStackTrace();
    } } private OutputStream out;
    }ChatClient.javapackage client;import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.Socket;public class ChatClient {
    public static void main(String[] args) {
    try {
    Socket s = new Socket("127.0.0.1", 1985);
    InputStream in = s.getInputStream();
    OutputStream out = s.getOutputStream();
    new ClientWriter(out).start();
    new ClientReader(in).start(); } catch (Exception e) {
    e.printStackTrace();
    }
    }}class ClientReader extends Thread {
    ClientReader(InputStream aIn) {
    in = aIn;
    } public void run() {
    try {
    DataInputStream dataInputStream = new DataInputStream(in);
    byte[] content=new byte[1000];
    while (true) {
    int count=dataInputStream.read(content);
    System.out.println("服务器端说:" + new String(content,0,count));
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } private InputStream in;
    }class ClientWriter extends Thread {
    ClientWriter(OutputStream aOut) {
    out = aOut;
    } public void run() {
    String info;
    try {
    BufferedReader br = new BufferedReader(new InputStreamReader(
    System.in));
    DataOutputStream dOutputStream=new DataOutputStream(out);
    while (true) {
    info = br.readLine();
    dOutputStream.write(info.getBytes());
    dOutputStream.flush();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } private OutputStream out;
    }
      

  4.   

    经过分析,原因是因为你使用BufferedReader.readLine来获得返回数据的,而这个函数要求每一行的末尾需要有\r\n(回车换行符)。但是你在输出的时候是用了BufferedWriter.write,这个函数并不会在输入的末尾加上\r\n,所以导致BufferedReader.readLine一直认为你的输入还没结束,所以一直处于阻塞状态。你可以把BufferedWriter.write全部替换成下面这样,问题就解决了PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
    String temp;
    while(true){
    try {
    temp=bReader.readLine();
    System.out.println("你输入的内容是:"+temp);
    pWriter.println(temp);
    System.out.println("数据发送成功");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
      

  5.   

    read()的方法基本都是阻塞的,你不给两个都在傻傻的等着!
      

  6.   

    Server和Client没有一个是有发送的,怎么读的出来、、