我正在使用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()));
握手完成后,看起来我正在获取加密数据。我在网上进行了一些研究,似乎我可能需要使用密码,但我不确定。有任何想法吗?
答案 0 :(得分:0)
available()总是返回0,而当底层源是SSLSocket时,ready()总是返回false。
使用这些方法中的任何一种都有正当理由。刚看完知道有或没有任何可用数据对您没有任何好处。你仍然必须阅读,所以阅读,你得到免费的阻止,而不是必须编码,而不是浪费时间,因为你睡了1000毫秒,数据在1毫秒后到达,或浪费周期,因为你反过来。将缓冲区自定义大小调整为available()返回没有任何好处:只需使用固定大小的缓冲区并将其分配到读取循环之外,从而也可以节省GC循环。