我在我的本地桌面上运行Nano80tat 8080.我可以在浏览器中本地访问服务器http://localhost:8080/
.那部分按预期工作.
但是,我不希望我的邻居(或者更糟的是,世界)也能够访问它http://my.local.ip.add:8080/
.
如何将其限制为仅限本地主机访问,以便我是唯一一个可以看到这些页面由我本地运行的NanoHttpd实例提供服务的人?
我正在尝试使用NanoHttpd在Android设备上运行HTTPS服务器(我的最终目标是在Android上运行WSS服务器).我在Android上使用NanoHttpd成功运行了HTTP Server和Websocket.我使用此命令在MAC上生成密钥并将其复制到我的设备上:
keytool -genkey -keystore key.keystore -storepass keypass -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
Run Code Online (Sandbox Code Playgroud)
我写了以下代码:
keyStore = KeyStore.getInstance("BKS");
keyStore.load(stream, keyStorePwd.toCharArray());
keyManagerFactory = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keyStorePwd.toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(keyManagerFactory.getKeyManagers(), null, null);
server.makeSecure(sc.getServerSocketFactory());
server.start();
Run Code Online (Sandbox Code Playgroud)
我在Chrome 38和42上测试了这个,"最小SSL/TLS"标志设置为"SSLv3".但是当我想连接到服务器时,我一直收到"ERR_SSL_VERSION_OR_CIPHER_MISMATCH"错误.
我在多台机器和浏览器上尝试了不同的协议实例(SSL/TLS).我尝试了NanoHttpd SSLServerSocketFactory方法.但错误是一样的.
我已经看过一些样本,包括:https: //github.com/NanoHttpd/nanohttpd/issues/139
有人对此发表评论吗?
我需要流式传输视频并在网页中持续播放.我正在使用Nanohttpd库在我的Android应用程序中运行服务器.我可以在页面加载时流式传输和播放视频.视频完成播放后,我无法再播放视频.每次我需要刷新页面才能播放视频.尝试第二次玩时出现以下错误.
java.net.SocketException: sendto failed: EPIPE (Broken pipe)
at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:546)
at libcore.io.IoBridge.sendto(IoBridge.java:515)
at java.net.PlainSocketImpl.write(PlainSocketImpl.java:504)
at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:266)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBody(NanoHTTPD.java:1386)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBodyWithCorrectEncoding(NanoHTTPD.java:1359)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBodyWithCorrectTransferAndEncoding(NanoHTTPD.java:1349)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.send(NanoHTTPD.java:1335)
at server.http.android.androidhttpserver.server.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:769)
at server.http.android.androidhttpserver.server.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:186)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: sendto failed: EPIPE (Broken pipe)
at libcore.io.Posix.sendtoBytes(Native Method)
at libcore.io.Posix.sendto(Posix.java:176)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:278)
at libcore.io.IoBridge.sendto(IoBridge.java:513)
at java.net.PlainSocketImpl.write(PlainSocketImpl.java:504)
at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:37)
at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:266)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBody(NanoHTTPD.java:1386)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBodyWithCorrectEncoding(NanoHTTPD.java:1359)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.sendBodyWithCorrectTransferAndEncoding(NanoHTTPD.java:1349)
at server.http.android.androidhttpserver.server.NanoHTTPD$Response.send(NanoHTTPD.java:1335)
at server.http.android.androidhttpserver.server.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:769)
at server.http.android.androidhttpserver.server.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:186)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
我发送的回复如下.
@Override
public Response serve(IHTTPSession session) {
FileInputStream fis = null;
File …
Run Code Online (Sandbox Code Playgroud) I can't make nanohttpd work. It seems not be able to find the www
directory in app's root.
My code is at https://github.com/tlkahn/neonx
My code at MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView navView = findViewById(R.id.nav_view);
mWebView = findViewById(R.id.webkit);
navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
WebSettings webSettings = mWebView.getSettings();
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
webSettings.setDomStorageEnabled(true);
mWebView.getSettings().setLoadsImagesAutomatically(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
});
if (!haveNetworkConnection()) {
new AlertDialog.Builder(this)
.setTitle("You are not connected to internet.")
.setMessage("Are you …
Run Code Online (Sandbox Code Playgroud) 我开始在项目中使用NanoHTTPD.事实上,它的简洁性非常好.不幸的是,事实证明我需要处理同时连接,例如我有一个很长的响应,同时服务器不会被阻止.
您有什么推荐的吗?我需要它简单,功能丰富的Nano.
问题:我正在使用NanoHTTPD.它运行良好,但它不提供.js文件,图像和其他.
详细说明:我pages
在assets文件夹中有一个文件夹.此文件夹包含index.html
,css文件,图像和其他.我正在使用像这样的NanoHTTPD,但是当我使用浏览器浏览时,没有任何样式或图像.服务器无法找到图像和其他文件.只有index.html文件的内容.活动:
MyHTTPD server = null;
try {
server = new MyHTTPD(getApplicationContext());
try
{
server.start();
}
catch( IOException ioe )
{
System.err.println( "Couldn't start server:\n" + ioe );
System.exit( -1 );
}
System.out.println( "Listening on port 8080. Hit Enter to stop.\n" );
try { System.in.read(); } catch( Throwable t ) {
System.out.println("read error");
};
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
MyHTTPD类
public Context ctx = null; …
Run Code Online (Sandbox Code Playgroud) 支持可嵌入的Java HTTP服务器时似乎存在多个极端情况.我已经看到了极简主义的方法,如NanoHTTPD,并利用com.sun.net.httpserver包试图嵌入Jetty和Tomcat.理想的可嵌入HTTP服务器将被实现,以便它可以通过Executor启动并带有Servlet/JSP支持,但是否则应允许使用其父级的记录器并允许集成其JMX钩子.
同样,它也应该是模块化的,您可以选择不包括某些功能.有没有人遇到过具有这种特性的任何基于Java的HTTP服务器?
我试图让nanohttpd在android下工作.我用过这个例子:
package com.example.android_test;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import com.example.android_test.NanoHTTPD.Response.Status;
import android.app.Activity;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final int PORT = 8765;
private TextView hello;
private MyHTTPD server;
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
hello = (TextView) findViewById(R.id.hello);
}
@Override
protected void onResume() {
super.onResume();
TextView textIpaddr = (TextView) findViewById(R.id.ipaddr);
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
int ipAddress = …
Run Code Online (Sandbox Code Playgroud) 我的应用程序由基于登录的用户系统组成,用户将在其中接收他的任务。用户的任务列表需要定期与服务器同步,以便任何新任务都会立即反映在应用程序上。我之前在其他应用程序中做过这种同步的东西,但我想知道最好的方法来做到这一点。我有两种方法,请告诉我哪个更好,或者如果您有任何其他想法,请告诉我。
方法一
我可以使用IntentService和AlarmManager以固定的时间间隔运行后台服务,并通过 http 请求(即应用程序到服务器请求)检查服务器上的任何更改。
方法 2
我可以使用NanoHTTPD库通过我的应用程序托管一个小型 TCP 服务器,并且在服务器上的每个新条目之后,我可以从服务器向这个小型 TCP 主机发出请求,通知这些更改(即服务器到应用程序请求)。
我以前使用过APPROACH1,但我对APPROACH2更感兴趣(我认为这会消耗更少的电量)。所以请让我知道哪种方法更好(即更有效、更安全等)来做到这一点。如果您有任何其他想法,请随时分享。
我正在尝试将NanoHTTPD添加到我的 Android 项目中。
正如 README.md 中提到的,我添加了
dependencies {
runtime(
[group: 'org.nanohttpd', name: 'nanohttpd', version: '2.3.1'],
)
}
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
Could not find method runtime() for arguments [{group=org.nanohttpd, name=nanohttpd, version=2.3.1}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
Run Code Online (Sandbox Code Playgroud)
我也尝试添加
repositories {
mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)
在别处提到,但同样的错误。
我尝试了通常的方法:
implementation 'org.nanohttpd.nanohttpd:2.3.1'
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
Failed to resolve: org.nanohttpd.nanohttpd:2.3.1:
Run Code Online (Sandbox Code Playgroud)
我正在使用 Android Studio 3.2.1 似乎有很多人在 Android 中愉快地使用它。我错过了什么?