我需要建立一个应用程序,它可以接收来自网络的数据并使用这些数据做一些不相关的事情。Java中的套接字...?
下面是一段代码,以表明我在做什么。
在服务器端:
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键(通过调试进行检查)后,手动键入命令行中的所有内容都将发送到服务器端。
所以,我可以手动连接到服务器端并发送一些数据,但我的代码拒绝连接。
任何知道我在做什么的人都是错的?
我不确定你为什么失败,但是我使用这两个教程轻松运行套接字:http://android-er.blogspot.com/2011/01/implement-simple-socket-server-in。 html 和http://android-er.blogspot.com/2011/01/simple-communication-using.html – HannahMitt 2012-04-13 17:05:43
@HannahMitt,他忘了'while'循环。服务器甚至不会在超过一秒的时间内监听连接。一旦服务器建立一个连接,它就完成了,不再听了。 – 2012-04-13 17:35:20
正如我所说,这只是一段代码。实际上,我正在使用while循环。此外,accept()方法将等待连接建立,所以我可以让服务器等待几个小时来建立第一个连接。之后,它将循环到另一个连接的开始。 – 2012-04-14 11:48:01