所以我用Java制作一个简单的客户端 - 服务器应用程序。它很简单,我想,我正在尝试实现一个blacklist.txt,它有几个IP地址,如果任何IP匹配试图连接到Socket的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
答案 0 :(得分:1)
更改此行
if (line == socket.getInetAddress().toString()) {
到
if (line.equals(socket.getInetAddress().toString())) {
字符串是对象(不是int
,float
,char
等基本类型,应与.equals()
进行比较。