Могу ли я построить соединение WebSocket с использованием Java 1.6? - PullRequest
0 голосов
/ 20 февраля 2019

Раньше я использовал TCP-сокеты для создания соединения, но была проблема с передачей сообщений, и теперь я пробую это с помощью WebSockets.Проблема в том, что мне нужно установить соединение с использованием Java 6, и я использую Jetty в качестве сервера, но поддерживает ли Jetty Java 6?Я знаю, что он совместим с Java 8, но в этой ситуации я не могу использовать Java 8.

Это код, который я использовал для создания TCPClient, может кто-нибудь помочь мне создать соединение с помощью WebSockets с Java 6.

public static void main (String args[]) {

        String host = "192.168.14.214";
        int port = 9080;
        new Client(host, port);
    }

    public Client(String host, int port) {
        try {
            String serverHostname = new String("192.168.14.214");

            System.out.println("Connecting to host " + serverHostname + " on port " + port + ".");

            Socket echoSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;

            try {
                echoSocket = new Socket(serverHostname, 9080);
                out = new PrintWriter(echoSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));

            } catch (UnknownHostException e) {
                System.err.println("Unknown host: " + serverHostname);
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Unable to get streams from server");
                System.exit(1);
            }

            AuthReqBean authReqBean = new AuthReqBean();
            AuthReqBean.AuthRequest authReq = authReqBean.new AuthRequest();
            authReq.setLgnNme("username");
            authReq.setPwd("asd");
            authReqBean.setAuthRequest(authReq);
            ObjectWriter ow = new 
ObjectMapper().writer().withDefaultPrettyPrinter();
            String json = ow.writeValueAsString(authReqBean);
            System.out.println(json);

            out.write(json);
       while (true) {
                System.out.print("client: ");
                String userInput = in.readLine();
                System.out.println("server: " + userInput);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я пробовал несколько тестовых кодов, чтобы создать соединение с помощью веб-сокетов, но каждый раз, когда он терпит неудачу, когда я использую Java 6, но когда его Java 8, он работает нормально.

public class SimpleEchoClient {
    public static void main(String[] args)
    {
        String destUri = "ws://echo.websocket.org";

        WebSocketClient client = new WebSocketClient();
        SimpleEchoSocket socket = new SimpleEchoSocket();
        try
        {
            client.start();

            URI echoUri = new URI(destUri);
            ClientUpgradeRequest request = new ClientUpgradeRequest();
            client.connect(socket,echoUri,request);
            System.out.printf("Connecting to : %s%n",echoUri);
            socket.awaitClose(5,TimeUnit.SECONDS);
 }
        catch (Throwable t)
        {
            t.printStackTrace();
        }
        finally
        {
            try
            {
                client.stop();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

 public SimpleEchoSocket()
    {
        this.closeLatch = new CountDownLatch(1);
    }

    public boolean awaitClose(int duration, TimeUnit unit) throws InterruptedException
    {
        return this.closeLatch.await(duration,unit);
    }

    @OnWebSocketClose
    public void onClose(int statusCode, String reason)
    {
        System.out.printf("Connection closed: %d - %s%n",statusCode,reason);
        this.session = null;
        this.closeLatch.countDown(); // trigger latch
    }

    @OnWebSocketConnect
    public void onConnect(Session session)
    {
        System.out.printf("Got connect: %s%n",session);
        this.session = session;
        try
        {
            Future<Void> fut;
            fut = session.getRemote().sendStringByFuture("Hello");
            fut.get(2,TimeUnit.SECONDS); // wait for send to complete.

            fut = session.getRemote().sendStringByFuture("Thanks for the conversation.");
            fut.get(2,TimeUnit.SECONDS); // wait for send to complete.

            session.close(StatusCode.NORMAL,"I'm done");
        }
        catch (Throwable t)
        {
            t.printStackTrace();
        }
    }

    @OnWebSocketMessage
    public void onMessage(String msg)
    {
        System.out.printf("Got msg: %s%n",msg);
    }
...