一个简单的聊天程序,请指点错在哪里了???
分2个程序,服务器和客户,为了方便输入,每个程序都专门建立了一个线程进行写,而主线程负责读
编译没错,运行的效果却不对,请指点:
这个是服务器的:
程序代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class ServerTest {    public static void main(String[] args) {
        new ServerTest(PORT).gogo();
    }
       private static final int PORT = 400;
    private ServerSocket server;
    private Socket socket;
    private PrintWriter writer;
    private BufferedReader reader;
    private BufferedReader in;  //用户写
    private Runnable writeThread;
    private String humanStr;
    private String clientStr;
       public ServerTest(int port){
        try{
            server = new ServerSocket(port);
            System.out.println("Server 已经建立...");
        }
        catch(Exception e1){
            e1.printStackTrace();
        }
    }
       public void gogo(){
        try{
            System.out.println("in gogo()...");
            socket = server.accept();
            System.out.println("Client 已经连接...");
            in = new BufferedReader(new InputStreamReader(System.in));
            writer = new PrintWriter(socket.getOutputStream());
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                       writeThread = new Runnable(){
                            public void run(){
                                try {
                                    while((humanStr = in.readLine()) != null){
                                        System.out.println("Server: " + humanStr);
                                        writer.write(humanStr + "\n");
                                    }
                                } catch (IOException e2) {
                                    e2.printStackTrace();
                                }
                            }
                        };
            new Thread(writeThread).start();
                       //System.out.println("before read");
            while((clientStr = reader.readLine()) != null){
                System.out.println("Client: " + clientStr + "\n");
            }
            //System.out.println("after read");
                       in.close();
            writer.close();
            reader.close();
            socket.close();
            server.close();
        }
        catch(Exception e3){
            e3.printStackTrace();
        }
    }
   }
这个是客户端的:
程序代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;public class ClientTest {    public static void main(String[] args) {
        new ClientTest(PORT).gogo();
    }
       private static final int PORT = 400;
    private Socket socket;
    private InetAddress address;
    private PrintWriter writer;
    private BufferedReader reader;
    private BufferedReader in;  //用户写
    private Runnable writeThread;
    private String humanStr;
    private String serverStr;
       public ClientTest(int port){
        try{
            address = InetAddress.getLocalHost();
            socket = new Socket(address,port);
        }
        catch(Exception e1){
            e1.printStackTrace();
        }
    }
       public void gogo(){
        try{
            in = new BufferedReader(new InputStreamReader(System.in));
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new PrintWriter(socket.getOutputStream());
                       writeThread = new Runnable(){
                public void run(){
                    try {
                        while((humanStr = in.readLine()) != null){
                            System.out.println("Client: " + humanStr + "\n");
                            writer.write(humanStr + "\n");
                        }
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }
                }
            };
            new Thread(writeThread).start();
                       //System.out.println("before read");
            while ((serverStr = reader.readLine()) != null){
                System.out.println("Server: " + serverStr + "\n");
            }
            //System.out.println("after read");
                       in.close();
            reader.close();
            writer.close();
            socket.close();
        }
        catch(Exception e3){
            e3.printStackTrace();
        }
    }
}
求指教哇!!!谢谢。

解决方案 »

  1.   

    没刷新流啊,应该加这句
    writer.flush();
      

  2.   

    想要server说话,client可以看见; client说话,server也能看见啊
      

  3.   


    好吧,我又试用了一下,换了个port就可以了。
    可能是之前的程序还占用了这个port
    换了个port,加了
    writer.flush();
    就OK了!
    谢谢
      

  4.   

    提醒一下:
    port不要用1024以内的,这些端口被指派给TCP/IP一些重要的应用程序,不过这个程序也没什么关系...呵呵
      

  5.   

    这个程序我也写过,功能是这样的SocketServer建立服务,Client端可以连接。Client端发送的信息会经过Server端转发给所有的Client端。这样就实现了一个类似于多人聊天室的功能。你的程序还可以继续改,做成支持多个客户端连接的就好了。需要的话可以把我的代码分享给你