Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ssl服务器/客户端应用程序传递字节[]_Java_Sockets - Fatal编程技术网

Java ssl服务器/客户端应用程序传递字节[]

Java ssl服务器/客户端应用程序传递字节[],java,sockets,Java,Sockets,我正在用java(服务器/客户端)创建一个使用安全连接(ssl)的应用程序 主类具有套接字和流的初始化: SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory .getDefault(); sslserversocket = (SSLServerSocket) sslserversocketfac

我正在用java(服务器/客户端)创建一个使用安全连接(ssl)的应用程序

主类具有套接字和流的初始化:

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory
                    .getDefault();
            sslserversocket = (SSLServerSocket) sslserversocketfactory
                    .createServerSocket(port);
            System.out.println("Server: listening on port: " + port + "\n");
            System.out.println("Waiting for connection...." + "\n");
            sslsocket = (SSLSocket) sslserversocket.accept();
            connected = true;
            System.out.println("Connection accepted \n");

            InputStream inputstreamconsola = System.in;
            InputStreamReader inputstreamreaderconsola = new InputStreamReader(
                    inputstreamconsola);
            BufferedReader bufferedreaderconsola = new BufferedReader(
                    inputstreamreaderconsola);

            in = new DataInputStream(sslsocket.getInputStream());
            out = new DataOutputStream(sslsocket.getOutputStream());
 SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
          sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);
          in = new DataInputStream(sslsocket.getInputStream());
          out = new DataOutputStream(sslsocket.getOutputStream());
服务器主类:

public static void main(String[] arstring) {
            DataOutputStream out = null;
    DataInputStream in = null;
    SSLServerSocket sslserversocket = null;
    SSLSocket sslsocket = null;
 ...
public static void main(String[] args) throws IOException {
    BufferedReader console;
    DataInputStream in = null;
    DataOutputStream out = null;
    SSLSocket sslsocket = null;
  ...
客户端主类:

public static void main(String[] arstring) {
            DataOutputStream out = null;
    DataInputStream in = null;
    SSLServerSocket sslserversocket = null;
    SSLSocket sslsocket = null;
 ...
public static void main(String[] args) throws IOException {
    BufferedReader console;
    DataInputStream in = null;
    DataOutputStream out = null;
    SSLSocket sslsocket = null;
  ...
我已经在每个类中创建了相应的套接字和流:

服务器套接字和流:

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory
                    .getDefault();
            sslserversocket = (SSLServerSocket) sslserversocketfactory
                    .createServerSocket(port);
            System.out.println("Server: listening on port: " + port + "\n");
            System.out.println("Waiting for connection...." + "\n");
            sslsocket = (SSLSocket) sslserversocket.accept();
            connected = true;
            System.out.println("Connection accepted \n");

            InputStream inputstreamconsola = System.in;
            InputStreamReader inputstreamreaderconsola = new InputStreamReader(
                    inputstreamconsola);
            BufferedReader bufferedreaderconsola = new BufferedReader(
                    inputstreamreaderconsola);

            in = new DataInputStream(sslsocket.getInputStream());
            out = new DataOutputStream(sslsocket.getOutputStream());
 SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
          sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);
          in = new DataInputStream(sslsocket.getInputStream());
          out = new DataOutputStream(sslsocket.getOutputStream());
客户端套接字和流:

SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory
                    .getDefault();
            sslserversocket = (SSLServerSocket) sslserversocketfactory
                    .createServerSocket(port);
            System.out.println("Server: listening on port: " + port + "\n");
            System.out.println("Waiting for connection...." + "\n");
            sslsocket = (SSLSocket) sslserversocket.accept();
            connected = true;
            System.out.println("Connection accepted \n");

            InputStream inputstreamconsola = System.in;
            InputStreamReader inputstreamreaderconsola = new InputStreamReader(
                    inputstreamconsola);
            BufferedReader bufferedreaderconsola = new BufferedReader(
                    inputstreamreaderconsola);

            in = new DataInputStream(sslsocket.getInputStream());
            out = new DataOutputStream(sslsocket.getOutputStream());
 SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
          sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);
          in = new DataInputStream(sslsocket.getInputStream());
          out = new DataOutputStream(sslsocket.getOutputStream());
我遇到的问题是,当我想将字节[]从服务器传递到客户端时,字节[]在服务器中具有正确的值,但它以空值到达客户端。 注意:当我使用readUTF()和writeUTF()传递字符串时,值​​发送和接收正确

在这种情况下会出现“错误”:

服务器:

     byte[] nonceBytes = new byte[(int) 8];
     nonce = System.currentTimeMillis();
     nonceBytes = longToByteArray(nonce);

    System.out.print("\nNonce gerado: ");
        for (int i = 0; i < 8; i++)
         System.out.print(getHexString(nonceBytes[i]));
    System.out.print("\n");
            out.writeUTF("pass#");
    out.write(nonceBytes, (int) 0, nonceBytes.length); VALUE HERE IS CORRECT

我想了解为什么我不能通过out.write()方法发送字节[],并通过in.read()方法将其放入客户端。

您忽略了由
read()返回的结果。
您不能假设它填充了缓冲区。在这种情况下,您可能应该使用
DataInputStream.readFully()


请注意,此问题与SSL无关。

您忽略了由
read()返回的结果。
您不能假设它填充了缓冲区。在这种情况下,您可能应该使用
DataInputStream.readFully()


请注意,这个问题与SSL无关。

但是read()返回的结果会在客户端和使用后保存到nbytes中。我不明白的是,非字节从服务器中的write()得到空值的原因。您的建议在EJP中起作用,但我想了解为什么read()不起作用。。不管怎样,非常感谢你。这很有效。它只是不做你认为它做的。这不是一回事。请参阅Javadoc。它没有说它在任何地方填满了缓冲区。恰恰相反,它用了相当长的篇幅来解释它可能不是。。好的,我看到了javadoc,我想我明白了。再次感谢您EJP。但是read()返回的结果会在客户端和使用后保存到N字节中。我不明白的是,非字节从服务器中的write()得到空值的原因。您的建议在EJP中起作用,但我想了解为什么read()不起作用。。不管怎样,非常感谢你。这很有效。它只是不做你认为它做的。这不是一回事。请参阅Javadoc。它没有说它在任何地方填满了缓冲区。恰恰相反,它用了相当长的篇幅来解释它可能不是。。好的,我看到了javadoc,我想我明白了。再次感谢你,EJP。