【发布时间】:2017-04-04 06:59:14
【问题描述】:
我遇到了一个问题。我正在从文件中读取 IP 并尝试创建并连接到套接字。
但从文件中读取总是显示相同的 IP 仍然无法连接并出现以下错误:
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
日志:
Inside While Loop - Thread started in Client
192.168.1.12
Calling Last Modified file in Client
java.net.ConnectException: Connection refused (Connection refused)
代码:
r = new BufferedReader(new FileReader(System.getProperty("user.home") + "/Desktop/ip.txt"));
client = new Socket(r.readLine(),8880);
奇怪的是,如果我这样做:
client = new Socket("192.168.1.12",8880);
它有效。但是两个IP都是一样的。 r.readline() 返回相同的 IP。
这里需要输入。
谢谢 新泽西州
【问题讨论】:
-
如果你做一个简单的
System.out.printlnr.readLine() 来查看它的输出,你确定你得到了预期的输出 -
是的,我登录了。它返回 192168.1.12。查看日志:内部 While 循环 - 线程在客户端 192.168.1.12 中调用客户端 java.net.ConnectException 中的最后修改文件:连接被拒绝(连接被拒绝)
-
@gueverra 我们(和您)无法从这些日志中看到字符串是否包含一些奇怪的空白字符。你也看不到你的
r.readLine()调用是否返回了一个看似空的行。您的代码应该这样做:String ip = r.readLine(); System.out.printf("Read IP: '%s'\n"); client = new Socket(ip,8880);(使用 printf() 语句中的单引号,您将看到那里是否有空格) -
消息“连接被拒绝”通常意味着您正在使用的端口上没有任何东西在监听。确保服务器软件正在运行。
-
@Joni 操作员很可能已经从他的文本文件中读取了一个空行或已到达文件末尾,并且有效地调用了
new Socket("", 8880);或new Socket((String)null, 8880),这两种情况都会尝试连接到 localhost 而不是文本文件中所述的 IP 地址。因此,我建议实际打印从文件中读取的行,而不是像new Socket(in.readLine(), 8880)中那样盲目地将其传递给套接字构造函数