1

所以我正在用 Java 制作一个简单的客户端-服务器应用程序。我认为,尽可能简单,并且我正在尝试实现一个 blacklist.txt,它具有多个 IP 地址,如果那里的任何 IP 与尝试连接到套接字的 IP 匹配,这些 IP 地址将被拒绝连接。我对此有点陌生,但这就是我得到的:

ServerSocket server = new ServerSocket(6500);
    System.out.println ("Server Started on port 6500");     
    while (true){//Waiting clients
        Socket socket = null;
        BufferedReader reader = new BufferedReader(new FileReader("C:\\UNIV\\Redes\\workspace\\Copy of Ex_4.3_Teste\\lists\\blacklist.txt"));
        String line = null;
        socket = server.accept();

        while ((line = reader.readLine()) != null) {
            if (line == socket.getInetAddress().toString()) {
                 System.out.println("IP Blacklisted: " + socket.getInetAddress().toString());
                 socket.close(); //Refusing connection
            }
            System.out.println("Line: " + line); //Just checking if reading OK
            System.out.println("Socket: " + socket.getInetAddress().toString()); //Just checking if reading OK

        }

        System.out.println("New connection..");

        Thread t = new Thread(new EchoClientThread(socket));                             
        t.start();          
    }       
}

然后我为每个连接的客户端启动一个线程,但我认为这与我的要求无关。

整个想法是如果 IP 地址等于 blacklist.txt 的任何行,则拒绝连接

我显然在这里有问题,因为它不起作用,有人可以指出我正确的方向吗?

非常感激。

编辑:忘记了 blacklist.txt 的内容:

/192.168.2.200
/127.0.0.1

我将斜杠放在 IP 之前,因为我注意到输出socket.getInetAddress().toString()/IP.IP.IP.IP

4

1 回答 1

2

更改此行

if (line == socket.getInetAddress().toString()) {

if (line.equals(socket.getInetAddress().toString())) {

字符串是对象(不是原始类型,如int, float, char),应该与.equals().

于 2013-06-15T15:41:38.563 回答