Java Web服务器阻止PC上的连接

时间:2015-11-07 23:36:05

标签: java web-services sockets network-programming

此时,我正在测试一个webserver客户端/主机系统,以便在我的raspberry pi(主机)和我的电脑(客户端)上运行。基本的想法是,每隔5秒,我的电脑上的客户端就会向位于" 192.168.0.11"的主机发送一条消息。在端口7051.它处理它并将消息发送回我的电脑。 为此,我使用以下客户端代码:

public static String getData() throws Exception {
    try {
        Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
        socket.setReuseAddress(true);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        int msg = 71;
        out.write("TEALBEE_CUR:" + msg);
        out.flush();
        String input;
        String data = "";
        while ((input = in.readLine()) != null) {
            data += input;
        }
        socket.close();
        return data;
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(-1);
    }

    return null;
}

这里的问题是,虽然数据流是一致的,并且可以运行至少一周;我在电脑上丢失了其他插座连接,即我的Kodi遥控器(这是我可以通过智能手机上的插座连接控制的媒体中心)。我的电脑在地址" 192.168.0.37"接受Kodi端口193的连接但是在运行Java客户端一段时间并向服务器发送大量请求之后,我注意到远程无法连接到我的PC。

我认为可能是这种情况,因为套接字无法重复使用,并且在一次使用后套接字变得无法使用。这似乎就是这种情况,因为我的主机为每个请求检测到不同的套接字端口。 我尝试通过添加代码socket.setReuseAddress(true)并在每条消息后正确关闭套接字来解决此问题,但问题仍然存在。

如何正确修复此问题(如果可能,只使用一个客户端套接字并正确关闭,以便下次再次使用)。

编辑:同样重要的是要注意我可以从我的电脑访问192.168.0.37:193,但是当无法建立套接字连接时,不能从我的智能手机访问。是的我确信PC和智能手机和RPI在同一个网络上,如果没有运行客户端程序,我可以通过智能手机访问192.168.0.37:193。

0 个答案:

没有答案