我正在为Android 4.2编写一个应用程序,目前在三星s2 +上进行了调试。
应用程序使用Socket
建立与服务器的连接,服务器使用ServerSocket
和establish()
- 方法获取其套接字。到现在为止还挺好。由于我必须在一个新线程中在android中创建所有网络,我创建了一个扩展Thread
的新类,它使用Activity
与基础BlockingQueue
(用户输入)进行通信。线程运行方法:
public void run() {
Socket s = null;
try {
s = new Socket(info.getIp(), 1337);
} catch (IOException e) {
e.printStackTrace();
}
String code = null;
try {
code = queue.take();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Log.e("DONE", code);
PrintWriter out = null;
try {
out = new PrintWriter(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
out.write(code);
out.flush();
}
连接已启动并正在运行,并且已记录的消息" DONE" +代码已被记录。但是,在我强制关闭应用程序之前,服务器端没有收到任何内容。 android线程是否无法刷新数据?
编辑:如果在写入后立即关闭套接字,则文本到达而不必强制关闭应用程序。如果套接字仍处于活动状态,为什么我无法读取服务器中的文本?
答案 0 :(得分:1)
尝试在发送给服务器的字符串中添加换行符,例如:
out.write(code+"\n");
out.flush();
并且如上面的EJP所说,将out.write放在try / catch
中答案 1 :(得分:0)
套接字连接仅提供发送和接收字节的功能。一旦客户端发送一个字节,服务器就会收到它。此外,一旦客户端断开连接,服务器就会知道它 - 这是关于从套接字获得的扩展。
此级别不存在消息的概念。消息由套接字上方的任何内容定义,因此大多数协议使用三种不同方式中的一种或多种来将字节流块化为"消息"