我想在Android设备上安装一个SSL加密的TCP服务器,并在计算机上安装一个连接到该设备的客户端.
我在Android设备上创建了一个具有自己的密钥库的SSLServerSocket.
final KeyStore localTrustStore = KeyStore.getInstance("BKS"); //NON-NLS
final InputStream in = context.getResources().openRawResource(R.raw.syncapp);
localTrustStore.load(in, "secret".toCharArray()); //Keystore pw
in.close();
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); //NON-NLS
final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(localTrustStore);
final KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(localTrustStore, "secret".toCharArray()); //privat key pw
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
serverSocket = sslContext.getServerSocketFactory().createServerSocket(SERVER_PORT);
((SSLServerSocket) serverSocket).setNeedClientAuth(true);
Run Code Online (Sandbox Code Playgroud)
然后我等待客户端连接.当客户端想要连接时,启动新线程并要求流:
final DataInputStream input = new DataInputStream(this.clientSocket.getInputStream());
final DataOutputStream output = new DataOutputStream(new BufferedOutputStream(clientSocket.getOutputStream()));
Run Code Online (Sandbox Code Playgroud)
首先,我使用此代码与USB-Tethering获得计算机和Android设备之间的连接.所以没有启用Wifi /网络.一切都很完美.
然后我在Android设备上激活了wifi并连接到没有互联网的wlan.但现在调用getInputStream()似乎需要5到10秒.如果我停用SSL,它可以很好地工作.如果wlan确实连接到互联网,也没有延迟.我用Android 4.2和5.1进行了测试.更新:现在我可以用Android 6测试这个问题.问题似乎在那里得到修复......
Handshake正确完成但之后似乎在Android设备上有某种延迟.(对getInputStream的调用会消耗那段时间)一些开发人员说它将进行DNS反向查找,这将进入超时状态.
看看捕获,第一次连接是在禁用wifi时进行的.进行数据传输需要0.3秒.然后我只是激活了wifi,我没有通过wifi连接,它仍然通过usb进行通信.它耗时超过5秒.
我在这里也发现了这个问题,但他们正在使用客户端套接字.我需要一个服务器套接字.有谁知道如何解决这个问题?
我正在尝试从资产加载矢量可绘制对象。
当我使用 png 文件时它工作正常:
final String name = "image.png";
final InputStream stream = context.getAssets().open(name);
drawable = Drawable.createFromStream(stream, name);
stream.close();
Run Code Online (Sandbox Code Playgroud)
我尝试使用 VectorDrawable.createFromStream() 和 VectorDrawableCompat.createFromStream() 但两者总是返回 null。
当我将矢量 drawable 添加到 drawbles 资源时,它可以毫无问题地加载。
我还尝试使用在将矢量文件添加到可绘制资源时创建的二进制 xml 文件。
我使用 API level 24 和 Support libs 24.2.0 with Android 5.1.1 来测试这个。它应该适用于 Android 4.2 及更高版本。
有谁知道如何解决这一问题?
这个问题可能与这个有关: Load a vector drawable into imageview from sd card