Расшифровка данных из безопасного сокета - PullRequest
1 голос
/ 06 апреля 2010

Я работаю над серверным приложением на Java. Я успешно преодолел рукопожатие в процессе общения, но как мне расшифровать поток ввода? Вот как я настроил свой сервер:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;

import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;

import org.json.me.JSONException;

import dictionary.Dictionary;


public class Server {

    private static int port = 1234;

    public static void main(String[] args) throws JSONException {

        System.setProperty("javax.net.ssl.keyStore", "src/my.keystore");
        System.setProperty("javax.net.ssl.keyStorePassword", "test123");

        System.out.println("Starting server on port: " + port);
        HashMap<String, Game> games = new HashMap<String, Game>();
        final String[] enabledCipherSuites = { "SSL_RSA_WITH_RC4_128_SHA" };

        try{
            SSLServerSocketFactory socketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            SSLServerSocket listener = (SSLServerSocket) socketFactory.createServerSocket(port);
            listener.setEnabledCipherSuites(enabledCipherSuites);
            Socket server; 

            Dictionary dict = new Dictionary();
            Game game = new Game(dict); //for testing, creates 1 global game.
            while(true){
                server = listener.accept(); 
                ClientConnection conn = new ClientConnection(server, game, "User");
                Thread t = new Thread(conn);
                t.start();  
            }
        }
        catch(IOException e){
            System.out.println("Failed setting up on port: " + port);
            e.printStackTrace();
        }
    }
}

Я использовал BufferedReader для получения данных, отправленных с клиента:

BufferedReader d = new BufferedReader(new InputStreamReader(socket.getInputStream()));

После того, как рукопожатие завершено, кажется, что я получаю зашифрованные данные. Я провел некоторые исследования в Интернете, и мне кажется, что мне может понадобиться шифр, но я не уверен. Есть идеи?

1 Ответ

0 голосов
/ 06 апреля 2010

available () всегда возвращает 0, а ready () всегда возвращает false, если основным источником является SSLSocket.

Существует несколько, если есть, веских причин для использования любого из этих методов.Только что прочитал.Бесполезно знать, что данные есть или нет.Вы все равно должны читать, поэтому читайте, и вы получаете блокировку бесплатно, вместо того, чтобы кодировать ее, и вместо того, чтобы тратить время, потому что вы спали в течение 1000 мс, а данные поступали через 1 мс, или тратить циклы, потому что вы сделали наоборот.И нет никакой пользы в настройке размера буфера для того, что возвращает available (): просто используйте буфер фиксированного размера и размещайте его вне цикла чтения, таким образом сохраняя также циклы GC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...