С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
1

Java и WebSocket

03.08.2018, 10:51. Показов 2425. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Никак не могу разобраться с библиотекой java_websocket. Вот отсюда https://github.com/TooTallNate/Java-WebSocket/wiki

У меня есть класс откуда по нажатию кнопки я вызываю функции вроде запустить вебсокет, отправить сообщение, отключть и так далее.
Создаю экземпляр:
Java
1
SimpleServer WebSock = new  SimpleServer();
А вот содержимое самого класса
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package application;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
 
import org.java_websocket.WebSocket;
import org.java_websocket.WebSocketImpl;
import org.java_websocket.framing.Framedata;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
 
 
 
 
public class SimpleServer extends WebSocketServer{
    
    public int TestFunc()
    {
        return (1);
        
    }
    
    public SimpleServer(InetSocketAddress address) {
        super(address);
    }
 
    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        conn.send("Welcome to the server!"); //This method sends a message to the new client
        //broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
        System.out.println("new connection to " + conn.getRemoteSocketAddress());
    }
 
    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        System.out.println("closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason);
    }
 
    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
    }
 
    @Override
    public void onMessage( WebSocket conn, ByteBuffer message ) {
        System.out.println("received ByteBuffer from "  + conn.getRemoteSocketAddress());
    }
 
    @Override
    public void onError(WebSocket conn, Exception ex) {
        System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
    }
    
    @Override
    public void onStart() {
        System.out.println("server started successfully");
    }
 
 
    public static void main(String[] args) {
        String host = "localhost";
        int port = 8887;
 
        WebSocketServer server = new SimpleServer(new InetSocketAddress(host, port));
        server.run();
    }
    //@Override
    public void onSend() {
        
    }
    
 
}
Проблема в том, что сам экземпляр создан как-то не так - требует некий параметр вроде адреса какого-то не могу понять а во вторых не знаю и не нашел примера как отправить сообщение с помощью функционала библиотекию По идее должно быть что-то вроде

Java
1
2
3
4
5
public void onSend(WebSocket conn, String str)
{
conn.send(str);
System.out.println("message sent");
}
но нет.

Прошу помочь разобраться или дать ссылку на иной jar с годными примерами

Всего то надо отправить клиенту (браузер js клиент) сообщение в формате json из одного из класса этого приложения - результат поиска по БД
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2018, 10:51
Ответы с готовыми решениями:

Java + WebSocket + Spring
Пытаюсь написать простенький чат с возможностью отправлять сообщения конкретному пользователю на...

Посоветуйте пожалуйста библиотеку для WebSocket Java
Доброго времени суток! Посоветуйте пожалуйста библиотеку для WebSocket Java... для сервера игры :)...

Как в java выполнить аутентификацию используя секретный ключ для работы по websocket c удаленным сервером?
Всем привет. Суть задачи состоит в том, что нужно установить связь с сервером по средствам...

Пример "drawingboard" из книги "Java WebSocket Programming"
Добрый день! Этот проект - обучающий пример из книги "Java WebSocket Programming" (Oracle Press)....

20
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.08.2018, 11:20 2
Additional Examples
You can find additional examples here.
читал wiki то нет?
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
03.08.2018, 21:35  [ТС] 3
пытаюсь сделать по имеющимся примерам. Вот мой класс для работы с Сокетом

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package application;
 
import java.net.InetSocketAddress;
 
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
 
public class WebSockConnection extends WebSocketServer // а вот тут ругается 
{
    
    public  WebSockConnection(InetSocketAddress address) {
        super(address);
    }
    
    public int TestFunc()
    {
        
        String host = "localhost";
        int port = 8887;
        WebSocketServer server = new WebSockConnection(new InetSocketAddress(host,port));
        server.run();
        return (1);
    }
    @Override  //Это просит убрать. Почему?
    public void onStart() 
    {
        System.out.println("server started successfully");
    }
    
}
Упрощен донельзя. Просто запустить сервер и написать об этом. И пока все. Функция send(Srting):void но к ней позже. Пока просто запустить сервер и отчитаться об этом в терминал.

ps на строку ругается The type WebSockConnection must implement the inherited abstract method WebSocketServer.onError(WebSocket, Exception)
Подскажите, прошу
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.08.2018, 21:49 4
1. тебя точно не смущает, что там у них проект с папкой, в который дохрена примеров?
2.
Цитата Сообщение от newline Посмотреть сообщение
The type WebSockConnection must implement the inherited abstract method WebSocketServer.onError
какое из слов тебе не понятно?
1
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
03.08.2018, 22:04  [ТС] 5
какое из слов тебе не понятно?
все понятны. Тем не менее если так,
Java
1
public abstract class WebSockConnection extends WebSocketServer
то
Java
1
WebSocketServer server = new WebSockConnection(new InetSocketAddress(host,port));  //Cannot instantiate the type WebSockConnection
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.08.2018, 22:12 6
Цитата Сообщение от newline Посмотреть сообщение
все понятны
по-русски фразу напиши
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
03.08.2018, 23:00  [ТС] 7
Цитата Сообщение от xoraxax Посмотреть сообщение
по-русски фразу напиши
тип WebSockConnection должен содержать абстрактный метод WebSocketServer.onError
Добавил...

Добавлено через 20 минут
болван. Согласен (с)

Итак. Все эти требуемые методы добавлены. Я пытаюсь вызвать
Java
1
2
3
4
5
6
7
8
@FXML
    protected void StartWebServer()
    {
        int S = WebSock.TestFunc();  //Вот эту функцию чтобы запустить сервер
        String SAsStr = Integer.toString(S);
        putOnLog(SAsStr);
        
    }
Предварительно создал экземпляр

Java
1
WebSockConnection WebSock = new WebSockConnection();
При создании экземпляра возникла ошибка The constructor WebSockConnection() is undefined
Требуется в качестве параметра передать inetSocketAddress. какой и как? localhost:8887 который слушать?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.08.2018, 23:20 8
Со вторым пунктом разобрались, остался первый
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
04.08.2018, 00:37  [ТС] 9
ладно, хрен с ним. Переделал в такой вот вариант
Так объявил экземпляр
Java
1
2
int port = 8887;
    WebSockConnection WebSock = new WebSockConnection( port);
так вызвал из иного класса функцию запуска сервера
Java
1
2
3
4
5
6
7
protected void StartWebServer()
    {
        int S = WebSock.TestFunc();
        String SAsStr = Integer.toString(S);
        putOnLog(SAsStr);
        
    }
А это сам класс с сокетом
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package application;
 
import java.net.InetSocketAddress;
 
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
 
 
public class WebSockConnection extends WebSocketServer
{
    
     public  WebSockConnection( int port) 
     {
         super(new InetSocketAddress( port ) );
     }
    
     public WebSockConnection( InetSocketAddress address ) {
            super( address );
    }
    public int TestFunc()
    {
        
        String host = "localhost";
        int port = 8887;
        //WebSocketServer server = new WebSockConnection(new InetSocketAddress(host,port));
        WebSocketServer server = new WebSockConnection(port);
        //server.run();
        server.start();
        return (1);
    }
    
    @Override
    public void onStart() 
    {
        System.out.println("server started successfully");
    }
    
    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        System.out.println("closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason);
    }
    
    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        conn.send("Welcome to the server!"); //This method sends a message to the new client
        //broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
        System.out.println("new connection to " + conn.getRemoteSocketAddress());
    }
    
    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
    }
    
    @Override
    public void onError(WebSocket conn, Exception ex) 
    {
        System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
    }
    
    public void send (String str)
    {
        System.out.println("Message was sent");
    }
}
Отправка сообщения пока не дышит
Подключиться к серверу теперь возможно
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
10.08.2018, 00:18  [ТС] 10
Уважаемые,
Расскажте а как передать сообщение со стороны сервера
1. Всем клиентам подключенным в данный момент
2. Отдельному клиенту

class:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package application;
 
import java.net.InetSocketAddress;
 
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
 
 
public class WebSockConnection extends WebSocketServer
{
    
     public  WebSockConnection( int port) 
     {
         super(new InetSocketAddress( port ) );
     }
    
     public WebSockConnection( InetSocketAddress address ) {
            super( address );
    }
    public int TestFunc()
    {
        
        String host = "localhost";
        int port = 8887;
        //WebSocketServer server = new WebSockConnection(new InetSocketAddress(host,port));
        WebSocketServer server = new WebSockConnection(port);
        //server.run();
        server.start();
        return (1);
    }
    
    //@Override
    public void onStart() 
    {
        System.out.println("server started successfully");
    }
    
    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        System.out.println("closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason);
    }
    
    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        conn.send("Welcome to the server!"); //This method sends a message to the new client
        //broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
        System.out.println("new connection to " + conn.getRemoteSocketAddress());
    }
    
    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("received message from " + conn.getRemoteSocketAddress() + ": " + message);
        SampleController GUI = new SampleController();
        GUI.putOnLog("received message from "   + conn.getRemoteSocketAddress() + ": " + message);
    }
    
    @Override
    public void onError(WebSocket conn, Exception ex) 
    {
        System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
    }
    @Override
    public void send (String str) //вот вместо этого
    {
        System.out.println("Message was sent");
    }
}
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
13.08.2018, 22:11  [ТС] 11
в теории должна быть доступна функция
Java
1
broadcast ("Hello");
Но на деле такого метода нет. А жаль. по крайней мере для отправки сообщения всем подключенным клиентам очень бы пригодилась.
Иначе надо как-то conn передавать в функцию отправки. (для отправки конкретному адресату)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.08.2018, 23:01 12
1. смотри
2. примеры
3. ....
4. PROFIT!...
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
13.08.2018, 23:08  [ТС] 13
в примерах есть broadcast ("отправить это");
на деле

The method broadcast(String) is undefined for the type WebSockConnection

4.PROFIT!...
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
14.08.2018, 07:13 14
...
Миниатюры
Java и WebSocket  
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
14.08.2018, 22:14  [ТС] 15
The method broadcast(String) is undefined for the type WebSockConnection

https://www.cyberforum.ru/atta... 1534274209
Миниатюры
Java и WebSocket  
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
15.08.2018, 02:09  [ТС] 16
вот то, что подключено. Нет там такой функции

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package application;
 
import java.net.InetSocketAddress;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
 
import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import org.java_websocket.WebSocketImpl;
import org.java_websocket.framing.Framedata;
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
15.08.2018, 06:04 17
Я тебе только что показал, что есть. Что и как делаешь ты, мне неизвестно. Поэтому или рассказывай или смотри примеры. Второй вариант, очевидно, лучше, так как рассказчик из тебя так себе.
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
15.08.2018, 09:19  [ТС] 18
рассказываю.
1. С целью использования webSocket -а был скачан и добавлен в java build path файл - библиотека java-websocket-1.3.0.jar.
2. создан класс для работы с этим подключением, в моем случае именуемый WebSockConnection.java
3. в класс добавлены Вышеуказанные импорты с целью использования необходимых функций
4. Успешно реализован запуск сервера, прием сообщений со стороны клиента.

5. profit?? а вот фиг. Необходима функция, вроде public void sendStr ( string ) которую я мог бы при необходимости вызвать на стороне сервера и с сервера отправить всем подключенным клиентам (тот самый broadcast) некую строку. (Пока пусь хоть просто строка).

Может jar не тот каой-то?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
15.08.2018, 09:38 19
Цитата Сообщение от newline Посмотреть сообщение
добавлен в java build path файл - библиотека java-websocket-1.3.0.jar.
про мавен прочитай
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 430
15.08.2018, 09:58  [ТС] 20
дополнительно. только что проделал следующее:
1. git clone все исходники с Git
2. задал jdk версию 1.8.0_171 вместо имеющейся 10.0.1 (не совместимы, не хитрая процедура, описывать не стану)
3. В директории с исходниками ant clean jar
4. образовался dist/java_websocket.jar
....
5. PROFIT?? посмотрю с утреца. На моих часах 23:46. Храпака давану,

Спасибо за советы и помощь

Добавлено через 10 минут
валюсь с ног от усталости не сплю от ответственности

Проверил. Это помогло. Броадкаст таки есть. ХЗ что там за jar у меня был.
0
15.08.2018, 09:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2018, 09:58
Помогаю со студенческими работами здесь

Websocket
<script type="text/javascript"> var onWindowLoad = function() { $("#status").fadeOut();...

WebSocket
Как использовать websocket на Node.js? Если писать так var WebSocketServer =...

Websocket
Здравствуйте. Пытаюсь автоматизировать некий процесс в сети. При ручном исполнении браузер...

WebSocket
Есть сервер до которого можно достучаться по определенному ip:port написанный на С++. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru