当前位置:编程学习 > JAVA >>

一个简单的聊天程序,请指点错在哪里了???

一个简单的聊天程序,请指点错在哪里了???
分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();
        }
    }
}

求指教哇!!!谢谢。 --------------------编程问答-------------------- 程序太长了 --------------------编程问答-------------------- 想了很久也没有头绪,求帮助啊! --------------------编程问答-------------------- 没刷新流啊,应该加这句

writer.flush();
--------------------编程问答-------------------- 你想要什么效果,说出来把 --------------------编程问答--------------------
引用 4 楼 xiaolitongxue 的回复:
你想要什么效果,说出来把

想要server说话,client可以看见; client说话,server也能看见啊 --------------------编程问答--------------------
引用 3 楼 wang7535067 的回复:
没刷新流啊,应该加这句

writer.flush();

加过了,还是不对呀!
不能互相通信 --------------------编程问答--------------------
引用 3 楼 wang7535067 的回复:
没刷新流啊,应该加这句

writer.flush();


好吧,我又试用了一下,换了个port就可以了。
可能是之前的程序还占用了这个port
换了个port,加了

writer.flush();
就OK了!
谢谢 --------------------编程问答-------------------- 提醒一下:
port不要用1024以内的,这些端口被指派给TCP/IP一些重要的应用程序,不过这个程序也没什么关系...呵呵 --------------------编程问答-------------------- 楼主问题找到了,给你提个意见,你问问题的时候异常现象都没给出来,谁都看不懂的! --------------------编程问答-------------------- 这个程序我也写过,功能是这样的SocketServer建立服务,Client端可以连接。Client端发送的信息会经过Server端转发给所有的Client端。这样就实现了一个类似于多人聊天室的功能。你的程序还可以继续改,做成支持多个客户端连接的就好了。需要的话可以把我的代码分享给你
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,