首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSLServerSocket误差

SSLServerSocket误差
EN

Stack Overflow用户
提问于 2014-05-08 16:15:45
回答 1查看 213关注 0票数 0

我试着用SSLServerSocket制作一个Android。我制作了一个密钥存储库,并开始制作服务器。我按照以下方式初始化服务器:

代码语言:javascript
复制
        String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        InputStream inputStream = context.getResources().openRawResource(R.raw.server);
        keyStore.load(inputStream, "passwd".toCharArray());

        String keyalg = KeyManagerFactory.getDefaultAlgorithm();
        kmf.init(keyStore, "passwd".toCharArray());

        KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyalg);
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(kmf.getKeyManagers(), null, null);
        SSLServerSocket ss = (SSLServerSocket) context.getServerSocketFactory().createServerSocket();
        inputStream.close();

        //Here comes the error
        ss.accept();

因此,如果我尝试接受客户端(没有客户端试图连接),我将得到一个错误。

代码语言:javascript
复制
        java.net.SocketException: accept failed: EINVAL (Invalid argument)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:110)
        at java.net.ServerSocket.implAccept(ServerSocket.java:203)
        at  com.android.org.conscrypt.OpenSSLServerSocketImpl.accept(OpenSSLServerSocketImpl.java:184)
        at de.turtc.util.ServerUtil.run(ServerUtil.java:88)

        Caused by: libcore.io.ErrnoException: accept failed: EINVAL (Invalid argument)
        at libcore.io.Posix.accept(Native Method)
        at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:55)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:98)

如果没有SSLServerSocket,它就能工作!我没有得到关于这个错误的任何信息!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 09:32:03

问题是:我没有给服务器一个端口。

代码语言:javascript
复制
    String keyStoreType = KeyStore.getDefaultType();
    KeyStore keyStore = KeyStore.getInstance(keyStoreType);
    InputStream inputStream = context.getResources().openRawResource(R.raw.server);
    keyStore.load(inputStream, "passwd".toCharArray());

    String keyalg = KeyManagerFactory.getDefaultAlgorithm();
    kmf.init(keyStore, "passwd".toCharArray());

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyalg);
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(kmf.getKeyManagers(), null, null);
    SSLServerSocket ss = (SSLServerSocket) context.getServerSocketFactory().createServerSocket(4444);
    inputStream.close();

    ss.accept();

所以我改变了:

代码语言:javascript
复制
SSLServerSocket ss = (SSLServerSocket)  context.getServerSocketFactory().createServerSocket();

代码语言:javascript
复制
SSLServerSocket ss = (SSLServerSocket)context.getServerSocketFactory().createServerSocket(4444);

解决了我的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23547152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档