通过套接字接收和回复数据

时间:2016-06-05 18:19:50

标签: java sockets

所以,现在,我唯一能做的就是,在连接时,pw.printin("Hi")。现在客户端的接收端可以回复“Hello”,如果是,我想用“Hi”回答,然后再次回复“Hello”,在无限循环中只在另一个中断言。

try {
            ServerSocket serverSocket = new ServerSocket(90);
            while(true) {
                String str= "Hello";                
                Socket socket = serverSocket.accept();
                OutputStream os = socket.getOutputStream();
                PrintWriter pw = new PrintWriter(os, true);
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                pw.println("Hi");
                if(br.readLine().equals(str)){
                    pw.println("Hi");
                }
                System.out.println(str);
            }
        } catch (IOException e) {
                try {
                    if(serverSocket!= null){
                    serverSocket.close();
                    }
                }
                 catch (IOException e1){

                    e1.printStackTrace(System.err);
                }
            }
        return 500;
    }
}

1 个答案:

答案 0 :(得分:0)

你的问题是,没有实际的循环可以反复向客户端说hi,你必须这样做。 Socket socket = serverSocket.accept();部分用于处理一个客户端,因此while(true)循环只是使服务器保持活动状态,以便多个客户端进行连接。因此,您必须使内部循环(最好是更严重的情况下客户端的其他线程/线程池)来构建每个客户端逻辑。

这种循环的样本:

try {
    String str = "Hello";
    String endingStr = "Bye";
    while (true) {
        Socket socket = serverSocket.accept();
        OutputStream os = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(os, true);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        pw.println("Hi");
        while ((input = br.readLine()) != null) { //Here is the loop part
            input = input.replaceAll("[^A-Za-z0-9]", "");
            if(input.equals(endingStr)){
                break;
            }

            if (input.equals(str)) {
                pw.println("Hi");
            }
        }
        socket.close();
    }
} catch (IOException ex) {
    try {
        if (serverSocket != null) {
            serverSocket.close();
        }
    } catch (IOException e1) {

        e1.printStackTrace(System.err);
    }
}

编辑:根据 EJP

的建议更改代码以防止NPE