Проблема отправки данных из java сервера к websocket клиенту на javascript

380
09 марта 2017, 22:13

Всем привет! У меня проблема, уже два дня копаюсь, но так и не решил. Есть сервер на джаве, и есть клиент на скрипте. Проблема в том, что у меня не получается оправить сообщение от сервера к клиенту, хотя когда я отправляю ответные данные для соединения клиенту при подключении - все работает(соединение есть), а далее не могу ничего отправить или принять.

Код сервера:

 public class Main {
    static List<Client> clients = new ArrayList<Client>();
    public static void main (String[] args) throws Exception {
        ServerSocket server = new ServerSocket(1340);
        while (true) {
            final Socket client = server.accept();
            Client s = new Client(client);
            clients.add(s);
            getConnect(clients.get(clients.indexOf(s)));
            for (Client c:clients
                 ) {
                c.sendMassege("YOU LALKA!!!");//уже не работает
            }
        }
    }
    static void getConnect(Client client) throws Exception {
        String data = new Scanner(client.in,"UTF-8").useDelimiter("\\r\\n\\r\\n").next();
        Matcher get = Pattern.compile("^GET").matcher(data);
        if (get.find())
        {
            Matcher match = Pattern.compile("Sec-WebSocket-Key: (.*)").matcher(data);
            match.find();
            String response = ("HTTP/1.1 101 Switching Protocols\r\n"
                    + "Connection: Upgrade\r\n"
                    + "Upgrade: websocket\r\n"
                    + "Sec-WebSocket-Accept: "
                    + DatatypeConverter
                    .printBase64Binary(
                            MessageDigest
                                    .getInstance("SHA-1")
                                    .digest((match.group(1) + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
                                            .getBytes()))
                    )
                    ;
            client.sendMassege(response);
        }
    }
}
class Client {
    protected Socket client;
    protected InputStream in;
    protected OutputStream out;
    public Client(Socket client) throws Exception
    {
        this.client = client;
        this.in =  client.getInputStream();
        this.out = client.getOutputStream();
    }
    protected void sendMassege(String k) throws Exception
    {
        if (k != null & k.length() > 0) {
            out.write((k+ "\r\n\r\n").getBytes(),0,(k+ "\r\n\r\n").length());
            out.flush();
        }
    }
}

Код клиента:

function connectToServerOne(){
 var socket = new WebSocket("ws://localhost:1340/");
socket.onopen = function() {
  alert("Соединение установлено.");
};
socket.onclose = function(event) {
  if (event.wasClean) {
    alert('Соединение закрыто чисто');
  } else {
    alert('Обрыв соединения'); // например, "убит" процесс сервера
  }
  alert('Код: ' + event.code + ' причина: ' + event.reason);
};
socket.onmessage = function(event) {
 alert(event.data);
if(event.data == "YOU LALKA!!!")
{
socket.Send("NO YOU LALKAQ!");
}
};
socket.onerror = function(error) {
  alert("Ошибка " + error.message);
};
}

Писал до этого на С# там все очень просто в этом плане, но необходимо сделать это на Jav`e, вот здесь и споткнулся

READ ALSO
Properties файл в качестве аргумента JVM?

Properties файл в качестве аргумента JVM?

Одно из требований к заданию по созданию CRUD приложения на Spring звучит следующим образом:

375
Не компилируются файлы java на windows xp

Не компилируются файлы java на windows xp

Примерно год назад установил jdk с целью программирования на языке javaТогда всё отлично работало, но вот недавно я решил возобновить изучение...

291
Общая высота View элементов

Общая высота View элементов

Есть активити в нем пару VIEW элементов, как сделать что бы одна родительская VIEW определяла высоту всем элементов, при этом она должны быть...

220
Проверка токена и редирект на активити [требует правки]

Проверка токена и редирект на активити [требует правки]

В приложение добавил новое активити, которое загружается первым и в котором будем происходить проверка токена: если он есть, редирект на одно...

343