我正在使用NanoHTTPD在Android应用程序中呈现Web服务器.我正在使用wifi锁来保持网络活跃,并使用CPU锁定以保持CPU清醒,并通过前台服务保持其运行,以便它永远不会死亡.
我发现它可以从其他设备访问半小时,然后半小时无法访问.每当它变得无法访问时,我可以在Android设备上打开safari并浏览到0.0.0.0:30000并验证服务器确实在运行.我也检查确保wifi连接似乎是.
有什么建议去哪儿看?
我正在尝试使用NanoHTTP来提供HTML文件.然而,NanoHTTP相对来说没有记录,我是Android新手.我的问题是,我在哪里存储html文件,以及我如何使用NanoHTTP提供服务.
我用NanoHTTPD编写了一个小型的Android服务器.它可以很好地提供HTML文件(位于sdcard/www/index.html的网页).任何人都可以帮我找出如何使用NanoHTTPD提供音频或视频文件而不是html页面?请原谅我这个问题看起来很傻,因为我是HTTP的新手!这是我的服务器端代码(我已将网页路径替换为音频文件的路径):
package com.example.zserver;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
public class MainActivity extends Activity {
private WebServer server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new WebServer();
try {
server.start();
} catch(IOException ioe) {
Log.w("Httpd", "The server could not start.");
}
Log.w("Httpd", "Web server initialized.");
}
@Override
public void onDestroy()
{
super.onDestroy();
if (server != null)
server.stop();
}
private class WebServer extends NanoHTTPD {
public …
Run Code Online (Sandbox Code Playgroud) 我怎样才能检索HTTP POST
执行时要求身体NanoHTTPD小号serve
的方法?
我已经尝试使用已经的getInputStream()
方法IHTTPSession
,但我总是得到一个SocketTimeoutException
在方法中使用它serve
.
NanoHttpd服务器代码可以在这里找到.
我正在使用NanoHttpd服务器来传输大型视频(大约150mb)的服务中启动一个新线程,但它只是在显示加载对话框时暂停.我尝试增加和减少缓冲区读取无济于事.似乎服务器无法在Android设备上正常运行.
当我通过桌面应用程序启动服务器时,相同的代码工作正常 我的流量超过150mb.从手机运行服务器时,我只尝试了20mb文件,它们也很好.但是,我需要流式传输更多.
我在我的Android应用程序中使用NanoHTTPD作为Web服务器.
我将两个文件名从客户端浏览器传递给NanoHTTPD服务器,我希望一次下载这两个文件,但下面的代码只下载file1,而不下载file2.
如何一次下载两个或多个文件?
public class MyWebServer extends NanoHTTPD
{
private final String rootDir;
public MyWebServer(int port, String rootDir)
{
super("192.168.1.4", port);
this.rootDir = rootDir;
}
@Override
public Response serve(IHTTPSession session)
{
Map<String, String> parms = session.getParms();
String filename1=GetFilename(parms);
String filename2=GetFilename(parms);
File file1 = new File(rootDir + filename1);
File file2 = new File(rootDir + filename2);
return downloadFile(file1);
return downloadFile(file2);
}
private Response downloadFile(File file)
{
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
} catch (FileNotFoundException ex)
{
Logger.getLogger(MyWebServer.class.getName()).log(Level.SEVERE, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个Android UPnP应用程序,其中包含一个嵌入式http服务器,因此它可以通过局域网从设备提供媒体文件.
我使用的Web服务器的第一个实现基于来自Apache HttpCore的ElementalHttpServer示例http://hc.apache.org/httpcomponents-core-ga/index.html.它必须稍微更改一下,因为Android库中已包含的org.apache.http元素与httpCore jar中包含的最新元素不同.
我试图用jar中的那些替换那些来自jar的那些但是无法完成 - 安卓库中的那些优先级.当我更改库顺序时,重复的类有问题.
而不是罐子,我包括源代码和更改数据包名称,以避免重复的类问题.
管道损坏和连接问题仍然存在问题.
我也尝试过来自HttpCoreNIO的NHttpServer,因为它具有与基本httpCore不同的类集,可以包含和使用,而不会与Android本身的httpCore冲突.
然后我使用了NanoHTTPD,这似乎是所有http服务器中最好的,但它仍然受到与其他所有服务器相同的问题的困扰:
java.net.SocketException: The connection was reset
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStreamImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStream(OSNetworkSystem.java:498)
at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:585)
at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.sendResponse(NanoHTTPD.java:828)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.run(NanoHTTPD.java:478)
at java.lang.Thread.run(Thread.java:1096)
Run Code Online (Sandbox Code Playgroud)
和
java.net.SocketException: Broken pipe
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStreamImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStream(OSNetworkSystem.java:498)
at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:585)
at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.sendResponse(NanoHTTPD.java:828)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.run(NanoHTTPD.java:478)
at java.lang.Thread.run(Thread.java:1096)
Run Code Online (Sandbox Code Playgroud)
最近我已经在应用程序中实现了iJetty,但问题仍然存在.有时请求设备进入无限循环的请求.
我能做错什么?标题可能有问题吗?
我使用DDMS从我的Android手机获取屏幕截图,我需要一种有效的方式来转换视频并通过网络传输视频.
我有一个RawImage,其中填充了屏幕截图的数据:
RawImage mRawImage;
Run Code Online (Sandbox Code Playgroud)
直到知道我使用SWT创建图像并保存它:
PaletteData paletteData = new PaletteData(
mRawImage.getRedMask(),
mRawImage.getGreenMask(),
mRawImage.getBlueMask());
ImageData imageData = new ImageData(
mRawImage.width,
mRawImage.height,
mRawImage.bpp,
paletteData,
1,
mRawImage.data);
ImageLoader s = new ImageLoader();
s.data = new ImageData[] {imageData};
s.save("temp.jpg",SWT.IMAGE_JPEG);
Run Code Online (Sandbox Code Playgroud)
我发现NanoHTTPD可用于流媒体,但我如何将图像转换并压缩为视频?
我找到了一个很好的教程,用于使用FFMPEG和video4linux2
.
是否可以bytes
从RawImage
FFMPEG发送转换为实时视频流?
实际代码:
$ffmpeg -f video4linux2 -i /dev/video0 http://78.47.18.19:8090/cam1.ffm
Run Code Online (Sandbox Code Playgroud)
将其替换为类似于:
$ffmpeg -f video4linux2 -i **<add here java stream>** http://78.47.18.19:8090/cam1.ffm
Run Code Online (Sandbox Code Playgroud)
有什么建议?
谢谢
PS:我期待一种解决方案,它可以帮助我将图像转换为压缩视频,然后通过网络传输视频,以便使用HTML5或Flash Player播放
我正在运行java RMI的Hello World示例
1)我在一个空文件夹中运行注册表
motta@motta-laptop ~/tmp $ rmiregistry
Run Code Online (Sandbox Code Playgroud)
2)我启动HTTP服务器以在运行时检索类.download文件夹包含客户端 - 服务器的远程接口
motta@motta-laptop ~/download $ java NanoHTTPD 8080
Run Code Online (Sandbox Code Playgroud)
3)我按照java RMI教程的建议启动服务器传递java.rmi.server.codebase属性
motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase="http://localhost:8080" WarehouseServer
Run Code Online (Sandbox Code Playgroud)
RMI注册表未联系HTTP服务器并且抛出异常(请参阅问题后的详细信息). 但如果我做以下事情
1)使用java.rmi.server.codebase属性启动rmi注册表
motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase="http://localhost:8080/"
Run Code Online (Sandbox Code Playgroud)
2)像以前一样启动HTTP服务器
3)没有任何选项启动服务器
motta@motta-laptop ~/server $ java WarehouseServer
Run Code Online (Sandbox Code Playgroud)
它有效,但为什么呢?似乎在第一个过程中,RMI注册表忽略了java.rmi.server.codebase属性
谢谢
=================================
我在跑步
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)
RMI注册表的例外
Constructing server implementation...
Binding server implementation to registry...
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in …
Run Code Online (Sandbox Code Playgroud) 我试图使用以下代码从IHTTPSession.getInputStream()读取InputStream,但每次都给出Socket TimeOut异常.
private String readInStream(InputStream in){
StringBuffer outBuffer=new StringBuffer();
BufferedInputStream bis=new BufferedInputStream(in);
try {
while(bis.available()>0){
int ch= bis.read();
outBuffer.append((char)ch);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("DATA_Length", "outputBuffer :"+outBuffer.toString().length());
return outBuffer.toString();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法,但出现了同样的异常
private String readInStream(InputStream in){
String line="";
StringBuffer outBuffer=new StringBuffer();
BufferedReader rd=new BufferedReader(new InputStreamReader(in));
try {
while((line=rd.readLine()) != null){
outBuffer.append(line);
}
} catch (IOException e) {
Log.e("IOException", "IOException in readInStream:");
e.printStackTrace();
}
Log.e("DATA_Length", "outputBuffer :"+outBuffer.toString().length());
return outBuffer.toString();
}
Run Code Online (Sandbox Code Playgroud)