Java-кодеки с открытым исходным кодом - PullRequest
0 голосов
/ 05 июня 2019

Я пишу веб-сервер с нуля.Там мне нужен кодек Http, который может декодировать строковый запрос (буфер) к объекту Http и кодировать http-объект в Sting (буфер).

Я нашел три кодека,

  1. ApacheКодеки (не могут использовать это, потому что это тесно связано с их структурой кодирования сервера)
  2. Netty Codes (не может использовать это, потому что это тесно связано с их структурой кодирования сервера)
  3. JDrupesКодеки (имеет некоторые проблемы с параллелизмом)

Но ни один из них не может быть использован для моих целей.Могу ли я использовать другие кодеки?

1 Ответ

0 голосов
/ 05 июня 2019
class SimpleHttpsServer implements Runnable {
    Thread process = new Thread(this);
    private static int port = 3030;
    private String returnMessage;
    private ServerSocket ssocket;

    /************************************************************************************/
    SimpleHttpsServer() {
        try {
            ssocket = new ServerSocket(port);
            System.out.println("port " + port + " Opend");
            process.start();
        } catch (IOException e) {
            System.out.println("port " + port + " not opened due to  " + e);
            System.exit(1);
        }
    }

    /**********************************************************************************/
    public void run() {
        if (ssocket == null)
            return;
        while (true) {
            Socket csocket = null;
            try {
                csocket = ssocket.accept();
                System.out.println("New Connection accepted");
            } catch (IOException e) {
                System.out.println("Accept failed: " + port + ", " + e);
                System.exit(1);
            }
            try {
                DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(csocket.getInputStream()));
                PrintStream printStream = new PrintStream(new BufferedOutputStream(csocket.getOutputStream(), 1024),
                        false);
                this.returnMessage = "";
                InputStream inputStream = csocket.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                // code to read and print headers
                String headerLine = null;
                while ((headerLine = bufferedReader.readLine()).length() != 0) {
                    System.out.println(headerLine);
                }
                // code to read the post payload data
                StringBuilder payload = new StringBuilder();
                while (bufferedReader.ready()) {
                    payload.append((char) bufferedReader.read());
                }

                System.out.println("payload.toString().length() " + payload.toString().length());
                if (payload.toString().length() != 1 || payload.toString().length() != 0) {
                    JSONObject jsonObject = null;
                    try {
                        jsonObject = new JSONObject(payload.toString());

                       // Handle here your string data and make responce 
                       // returnMessage this can store your responce message



                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + this.returnMessage;
                    printStream.write(httpResponse.getBytes("UTF-8"));
                    printStream.flush();

                }else {
                    /*String httpResponse = "HTTP/1.1 200 OK\r\n\r\n";
                    outStream.write(httpResponse.getBytes("UTF-8"));
                    outStream.flush();*/
                }

                printStream.close();
                dataInputStream.close();
                // csocket.close();
                System.out.println("client disconnected");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /************************************************************************************/
    public static void main(String[] args) {
        new SimpleHttpsServer();
    }
}

может быть, это поможет вам

...