我写的一个简单套接字连接服务器可以启动,但是客户程序一启动的时候就卡在那里往下走不了了,不知道怎么回事情,请大家帮我看看代码有什么问题没有.谢谢各位了import java.net.*;public class Server {
    public Server() {
        try{
            ServerSocket server=new ServerSocket(8189);
            System.out.println("waiting");
            while(true){
                    Socket s=server.accept();
                    SocketThread st=new SocketThread(s);
                    st.start();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }    public static void main(String[] args) {
        Server server = new Server();
    }
}
import java.net.*;
import java.io.*;public class SocketThread extends Thread {
    private Socket socket;
    public SocketThread(Socket s) {
        socket=s;
    }
    public void run(){
        try{
            String s;
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out=new PrintWriter(socket.getOutputStream());
            System.out.println("已经建立了连接");
            out.println("你已经连接到服务器");
            while(true){
                s=in.readLine();
                if(s!=null){
                    if(s.equalsIgnoreCase("exit"))
                        break;
                    System.out.println(s);
                }
            }
            out.close();
            in.close();
            socket.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
import java.net.*;
import java.io.*;public class Client {
    public Client() {
    }
    public static void main(String[] args){
        try{
            Socket socket=new Socket(InetAddress.getByName("localhost"),8189);
            System.out.println(socket.isConnected());
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
            String s=in.readLine();
            System.out.println(s);
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            while(true){
                System.out.println("请输入消息");
                String Keyboard=br.readLine();
                out.println(Keyboard);
                if(Keyboard.equalsIgnoreCase("exit"))
                    break;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
客户端走到String s=in.readLine();就走不下去了,我server端输出了一个String啊,不知道为什么它收不到!谢谢各位帮助!

解决方案 »

  1.   


    public class Server {
        public Server() {
            try{
                ServerSocket server=new ServerSocket(8189);
                System.out.println("waiting");
                
                while(true){
                        Socket s=server.accept();
                        BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
                        PrintWriter out=new PrintWriter(s.getOutputStream());
                        System.out.println("已经建立了连接");
                        out.println("你已经连接到服务器");
                        SocketThread st=new SocketThread(s);
                        st.start();
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }    public static void main(String[] args) {
            Server server = new Server();
        }
    }out.println("你已经连接到服务器");  应该放在Server.java里面 
      

  2.   

    楼上兄弟,谢了
    原因找到了,是因为我out.println()没有flush
    我是在accept()新建一个线程来接收请求的,所以不能放在server里,如果那样,就只能一次响应一个用户了
    鉴于我也解决了一部分,自己给自己散点儿分
      

  3.   

    哈哈~ 那不行的~! csdn怎么可能留下这么大的bug
      

  4.   

    太失败了,楼上兄弟解答一下我的疑问,是没有flush()的原因吗?那为什么书上没有flush一样运行?
      

  5.   

    放在server里可以响应多个用户的
    死循环accept啊
    放SERVER里面好像就不要FLUSH了
      

  6.   

    问题在于你的in.readLine();这里
    这个一直要遇到换行符或结束符才返回,你如果只write别的字符,而不写\n或close的话,不出错就永远不会返回,你可以write一个串后面加一个\n试试
      

  7.   

    哦,小弟恍然大悟
    回hasenmai兄弟,放死循环同一时刻也只能响应一个客户
    如果不多线程,就不能同时响应,我这么认为
    谢谢楼上兄弟
      

  8.   

    回zh_ua兄弟,我是用的println()方法,它应该自己就加一个\n啊
      

  9.   

    问题是我加一个out.flush()就一切OK,把他注释掉就走不下去