我正在制作使用热点服务器和客户端连接在两台设备之间使用wifi传输数据的应用程序。
我使用以下代码将数据从客户端发送到服务器。
OutputStream stream = socket.getOutputStream();
stream.write("".getBytes());
ContentResolver cr = context.getContentResolver();
InputStream is = null;
try {
is = new ByteArrayInputStream(data.getBytes());
} catch (Exception e) {
Log.d("TEST", e.toString());
}
copyFile(is, stream);
这是我的复制文件方法。
public static boolean copyFile(InputStream inputStream, OutputStream out) {
byte[] buf = new byte[1024];
while (true) {
try {
int len = inputStream.read(buf);
if (len != -1) {
out.write(buf, 0, len);
} else {
//out.flush();
//out.close();
return true;
}
} catch (IOException e) {
Log.d("TEST","faaaaaaaaaaaaaaaa::::"+ e.toString());
return false;
}
}
}
而且,这是我的客户端代码。
try {
AppFonts.serverSocket = new ServerSocket(8988);
Log.d("TEST", "Server: Socket opened0000000000");
AppFonts.socket = AppFonts.serverSocket.accept();
Log.d("TEST", "Server: connection done0000000000000000");
// OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
String gotData = convertStreamToString(AppFonts.socket.getInputStream());
Log.d("TEST", "Server: Socket Files,,,,,,");
Log.d("TEST", "server: copying files0000000000 " + gotData);
return gotData;
} catch (IOException e) {
Log.e("TEST", "fsat , " + e.getMessage());
e.printStackTrace();
return null;
} catch (Exception e2) {
e2.printStackTrace();
return null;
}
在copyFile()方法中,我尝试过.flush()但是客户端没有收到数据。
-
out.close();
数据发送到客户端时,但未使用该数据无法到达客户端。答案 0 :(得分:1)
为了连续传输数据,你可以做这样的事情
Timer scheduler = new Timer();
scheduler.scheduleAtFixedRate(task,1000,1000);
final Runnable task = new Runnable() {
public void run() {
try {
is = new ByteArrayInputStream(data.getBytes());
} catch (Exception e) {
log.d("TEST", e.toString());
}
}
};
以便不断获取更新的数据流。
关闭输出流并不意味着流中的数据将不再可用。这意味着您正在使用的输出流已从内存中释放,并且为了读取您需要读取下一个数据流所需的新数据。