文件下载android服务器
这几天我一直在努力解决这个问题。我想创建一个本地android服务器,让其他设备在LAN中下载文件。到目前为止,我已经创建了一个socket服务器,它在输出流上写一个pdf文件和头文件,但它不工作。当url在网络浏览器上被点击时,几乎95%的数据在下载失败后被毫无问题地下载,这表明网络问题(在谷歌浏览器中) 以下是创建服务器的代码:文件下载android服务器,android,httpresponse,socketserver,Android,Httpresponse,Socketserver,这几天我一直在努力解决这个问题。我想创建一个本地android服务器,让其他设备在LAN中下载文件。到目前为止,我已经创建了一个socket服务器,它在输出流上写一个pdf文件和头文件,但它不工作。当url在网络浏览器上被点击时,几乎95%的数据在下载失败后被毫无问题地下载,这表明网络问题(在谷歌浏览器中) 以下是创建服务器的代码: class VideoStreamServer { public void startServer() { outFilePath = g
class VideoStreamServer {
public void startServer() {
outFilePath = getActivity().getExternalFilesDir("/") + "/pdf.pdf";
outFile = new File(outFilePath);
Runnable videoStreamTask = new Runnable() {
@Override
public void run() {
try {
ServerSocket socket = new ServerSocket(port);
System.out.println("Waiting for client to connect.");
while (true) {
Socket client = socket.accept();
BufferedOutputStream os = new BufferedOutputStream(client.getOutputStream());
FileInputStream in = new FileInputStream(outFile);
BufferedInputStream inFromClient = new BufferedInputStream(client.getInputStream());
StringBuilder sb = new StringBuilder();
sb.append("HTTP/1.1 200 OK\r\n");
sb.append("Accept-Ranges: bytes\r\n");
sb.append("Connection: close\r\n");
sb.append("Content-Length: " + in.available() + "\r\n");
sb.append("Content-Disposition: attachment; filename=file.pdf\r\n");
sb.append("Content-Type: application/pdf \r\n");
sb.append("\r\n");
byte[] data = new byte[1024];
int length;
//inFromClient.read(data);
//System.out.println("request from client"+getStreamData(inFromClient));
System.out.println("Thread Started");
//System.setProperty("http.keepAlive", "false");
os.write(sb.toString().getBytes());
while ((length = in.read(data)) != -1) {
os.write(data, 0, length);
}
os.close();
client.close();
socket.close();
in.close();
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
Thread streamServer = new Thread(videoStreamTask);
streamServer.start();
}
}
任何帮助都将不胜感激
EDIT1
public String getStreamData(InputStream in) {
StringBuffer buffer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
try {
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return buffer.toString();
}
您已经有了一个关于同一问题的线程。。你应该在那里报告输入流。同样,你也没有指定错误。在那个线程中,我试图流式传输视频,我一直在努力解决这个问题。然后我想我应该从一个简单的东西pdf(文件)下载开始。我仍然无法使它工作。我不理解您正在使用的输入字符串。我尝试读取输入流,但它也不起作用。我只是想方设法解决我的问题。如果你知道解决方案,请与我分享。我会非常感激的。我需要帮助,伙计。你当时没有报告“INFOROMCLIENT”。为什么不呢?请立即报告并显示完整的代码。那么为什么您仍然没有发布
getStreamDatta()
的代码呢?还有一份关于发生了什么的报告?我给了您一个提示,您应该首先从inputstream中读取。现在就做,解决你的问题!事实上我在办公室,这里没有代码。我在家时会发帖。谢谢你的关注。我会在晚上9点左右做。很抱歉给您带来不便。