Код состоит в основном из двух классов. Тот, который ожидает подключения:
Код: Выделить всё
public class ListenerThread extends Thread
{
public void run()
{
try
{
ServerSocket serverSocket = ServerSocketFactory.getDefault().createServerSocket(8082);
for (;;)
{
Socket connected = serverSocket.accept();
new ClientThread(connected).start();
}
} catch (IOException e)
{
}
}
}
Код: Выделить всё
public class ClientThread extends Thread
{
private final Socket socket;
public ClientThread(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
byte[] buffer = new byte[2000];
for(;;)
{
int read = in.read(buffer, 0, buffer.length);
if (read = 4 && recData.substring(0, 4).compareToIgnoreCase("GET ") == 0)
{
reply(out,"Moin Moin");
}
}
in.close();
out.close();
socket.close();
} catch (IOException e)
{
}
}
private void reply(DataOutputStream output, String content)
{
SimpleDateFormat gmtFormat = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss 'GMT'", Locale.getDefault());
gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8), false);
pw.append("HTTP/1.1 200\r\n");
pw.append("Content-Type: text/plain; charset=utf-8\r\n");
pw.append("Access-Control-Allow-Origin: *\r\n");
pw.append("Date: ").append(gmtFormat.format(new Date())).append("\r\n");
pw.append("Connection: keep-alive\r\n");
byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
pw.append("Content-Length: ").append(String.valueOf(bytes.length)).append("\r\n");
pw.append("Server: MoinMoin\r\n");
pw.append("\r\n");
pw.flush();
try
{
output.write(bytes);
} catch (IOException e)
{
}
}
}
Код: Выделить всё
private ListenerThread listener = null;
[..]
listener = new ListenerThread();
listener.start();
Но теперь я хочу обновить его до https, потому что браузеры в наши дни не любят незашифрованные соединения. Простое использование SSLServerSocketFactory вместо ServerSocketFactory и т. д. не поможет. Должно быть больше. Браузер сообщает мне, что соединение небезопасно. Я думаю, он прав. Мне нужно как-то предоставить сертификат. Возможно, для игры достаточно самоподписанного сертификата. Но как мне это применить? Любой намек очень приветствуется.
Пожалуйста, не беспокойтесь о том, что представленный код отвечает на каждый запрос get одной и той же фразой, это не имеет значения для моего вопроса о включении запросов https.
Обновление: похоже, никто не думает, что поток, предлагающий сервер https, может быть полезен... хотя другие среды поддерживают это более или менее готово (python) или включают в себя шаблоны проектов для аналогичных идей (Visual Studio)...
Подробнее здесь: https://stackoverflow.com/questions/797 ... en-in-java
Мобильная версия