【发布时间】:2012-04-13 17:00:22
【问题描述】:
我需要构建一个可以通过网络接收数据并使用这些数据做一些不相关的事情的应用程序。
这里有一段代码来说明我在做什么。
在服务器端:
static Socket client = null;
static ServerSocket ss = null;
if (ss != null) {
ss.close();
}
ss = new ServerSocket(5513);
isrunning = true;
System.out.println("Waiting for client...");
client = ss.accept();
System.out.println("Client accepted.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
和客户端:
Socket client = null;
PrintWriter out = null;
try {
client = new Socket("hostname", 5513);
out = new PrintWriter(client.getOutputStream(), true);
}
请注意,这只是一段代码。代码中没有错误。
运行服务器端代码后,它正确地等待客户端连接。
现在问题来了。一旦我尝试从客户端连接,我就会收到“连接被拒绝”错误。
但是,我在互联网上找到了一些东西,告诉我尝试从客户端进行远程登录。例如,让服务器端的 IP 为 192.168.1.1。因此,使用此命令后:
telnet 192.168.1.1 5513
我实际上与服务器建立了连接。该命令将启动一个空屏幕,并且我在命令行中手动键入的所有内容都会在按 Enter 后发送到服务器端(通过调试检查)。
所以,我可以手动连接到服务器端并发送一些数据,但是我的代码拒绝连接。
有谁知道我做错了什么?
【问题讨论】:
-
我不确定你的失败的确切原因,但我使用这两个教程轻松运行了套接字:android-er.blogspot.com/2011/01/… 和 android-er.blogspot.com/2011/01/simple-communication-using.html
-
@HannahMitt,他忘记了
while循环。服务器甚至没有超过一秒钟的时间来监听连接。一旦服务器建立 ONE 连接,它就完成了,不再监听。 -
正如我所说,这只是一段代码。实际上,我正在使用 while 循环。此外,accept() 方法会等待连接建立,所以我可以让服务器等待几个小时来建立第一个连接。之后,它将循环到另一个连接的开始。
-
这是一个完整的例子:stackoverflow.com/a/22079083/3315914