服务器/客户端通信不工作java

时间:2013-08-01 21:16:04

标签: java sockets stream

我正在尝试编写一个程序,其中客户端请求服务器拥有的核心数。我这样做如下:

客户端:

 public void actionPerformed(ActionEvent e) {
            try {
                Socket clientSocket = new Socket("128.59.65.200", 6789);
                DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
                BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String numberOfCores = inFromServer.readLine();clientSocket.close();
                System.out.println(numberOfCores);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

    });

服务器

   public static void sendNumberOfCores() {
    Thread coresThread = new Thread() {
        public void run() {
            try {
                int numberOfCores;
                ServerSocket welcomeSocket = new ServerSocket(6789);
                while (true) {
                    Socket connectionSocket = welcomeSocket.accept();
                    DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
                    numberOfCores = Runtime.getRuntime().availableProcessors();
                    outToClient.write(numberOfCores);
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    };
    coresThread.setName("Wait for core request thread");
    coresThread.start();
}

然而,当我加载服务器并点击运行客户端代码的gui上的按钮时,没有任何反应,按钮就会卡住。造成这种情况的原因是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

Server not initialized on the 6789 port and make sure you do that in a separate thread.
Some thing like this.

In Server class:
--Make an inner class say MyServer

    class MyServer implements Runnable{
        final int BACKLOG=10;    //10 is the backlog,if your server wishes to serve  requests.
        final int PORT = 6789;  
        public void run(){
            try {  

                      ServerSocket serverSocket = new ServerSocket(PORT,BACKLOG);  //10 is the backlog,if your server wishes to serve conncurrent requests.

                while (true) {  
                      Socket ClientConnetion = serverSocket.accept();


            //Now whatever you want to do with ClientConnection socket you can call


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


--Start this thread in you main server class

MyServer mys=new MyServer();
        Thread r=new Thread(mys);
        mys.start();

答案 1 :(得分:0)

当客户端上的代码等待字符串时,我发送了一个整数。