Java:具有简单黑名单的套接字连接
因此,我正在用Java制作一个简单的客户机-服务器应用程序。我认为这很简单,我正在尝试实现一个blacklist.txt,它有多个IP地址,如果其中任何一个IP地址与试图连接到套接字的IP地址匹配,就会被拒绝连接。我对这有点陌生,但我得到的是:Java:具有简单黑名单的套接字连接,java,sockets,serversocket,Java,Sockets,Serversocket,因此,我正在用Java制作一个简单的客户机-服务器应用程序。我认为这很简单,我正在尝试实现一个blacklist.txt,它有多个IP地址,如果其中任何一个IP地址与试图连接到套接字的IP地址匹配,就会被拒绝连接。我对这有点陌生,但我得到的是: ServerSocket server = new ServerSocket(6500); System.out.println ("Server Started on port 6500"); while (true){//W
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
更改此行
if (line == socket.getInetAddress().toString()) {
到
字符串是对象(不是像
int
、float
、char
)这样的基本类型,应该与进行比较。equals()
Java字符串应该通过.equals()
@dlev进行比较是的,你完全正确,我的错误。它现在起作用了,我很惭愧^^^如果你愿意,把它作为解决方案,我会接受的。很高兴事情现在起作用了。老实说,我认为更好的解决办法是删除这个问题,因为它是相当本地化的。我建议您扩展serverSocket,创建一个类似BlacklistingServerSocket的类,并重载accept方法。生成更优雅的代码,而不是将所有逻辑混合在一个地方
if (line.equals(socket.getInetAddress().toString())) {