Клиент WebSocket во Flutter не получает сообщения от сервера (Netty WebSocket Server)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Клиент WebSocket во Flutter не получает сообщения от сервера (Netty WebSocket Server)

Сообщение Anonymous »

У меня возникли проблемы со связью через WebSocket в моем приложении Flutter. Сервер (использующий Netty) успешно получает идентификатор пользователя и отвечает сообщением, но клиент Flutter WebSocket не может получать какие-либо сообщения от сервера.
Что я уже сделал:
Серверная сторона (Netty WebSocket Server) Код:
Сервер создан с использованием Netty, а сервер WebSocket настроен следующим образом:

Код: Выделить всё

public class WebSocketServer {

private final int port;

public WebSocketServer(int port) {
this.port = port;
}

public void start() throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();

try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(65536));
pipeline.addLast(new ChunkedWriteHandler());
pipeline.addLast(new WebSocketServerProtocolHandler("/ws"));
pipeline.addLast(new WebSocketFrameHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);

Channel channel = serverBootstrap.bind(port).sync().channel();
System.out.println("WebSocket Server started on port " + port);
channel.closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}

// WebSocketFrameHandler handles the incoming WebSocket frames.
public class WebSocketFrameHandler extends SimpleChannelInboundHandler {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) {
// Print client info
System.out.println("New client connected with userId: 1234 and assigned connectionId: " + ctx.channel().id().asLongText());

// Send a message to the client
ctx.channel().writeAndFlush(new TextWebSocketFrame("Welcome user 1234! Your connection ID is: " + ctx.channel().id().asLongText()));
}
}

public static void main(String[] args) throws InterruptedException {
new WebSocketServer(8080).start();
}
Сервер работает на ws://localhost:8080/ws и отправляет ответ «Добро пожаловать, пользователь 1234! Ваш идентификатор подключения: : "клиенту.
Код клиента Flutter:
Во Flutter я использую WebSocketChannel для подключения к серверу WebSocket и прослушивания сообщений:

Код: Выделить всё

import 'package:web_socket_channel/web_socket_channel.dart';

class SocketWithNetty extends StatefulWidget {
const SocketWithNetty({super.key});

@override
State createState() => _SocketIoNewState();
}

class _SocketIoNewState extends State  {
late WebSocketChannel _channel;
late TextEditingController _controller;
String _message = '';

@override
void initState() {
super.initState();

// Initialize WebSocket connection
_channel = WebSocketChannel.connect(Uri.parse('ws://localhost:8080/ws?userId=1234'));

// Listen to WebSocket stream to receive messages
_channel.stream.listen(
(message) {
setState(() {
_message = message;
});
},
onError: (error) {
print("Error: $error");
},
onDone: () {
print("WebSocket connection closed");
},
);

_controller = TextEditingController();
}

@override
void dispose() {
_channel.sink.close();
_controller.dispose();
super.dispose();
}

void _sendMessage() {
if (_controller.text.isNotEmpty) {
_channel.sink.add(_controller.text);
}
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('WebSocket Client')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextField(
controller: _controller,
decoration: InputDecoration(labelText: 'Send a message'),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _sendMessage,
child: Text('Send Message'),
),
SizedBox(height: 16),
Text('Server Response: $_message'),
],
),
),
);
}
}

Проблема:
  • Соединение WebSocket успешно установлено между клиентом Flutter и Сервер Netty.
  • Клиент Flutter может отправлять сообщения на сервер, но не получает никаких сообщений обратно от сервера.
  • На сервере стороне, я вижу, что вызывается метод writeAndFlush и сообщение отправляется в клиент. Однако клиент Flutter не получает ответ.
    Что я пробовал:
  • Проверил журналы сервера. Сервер правильно регистрирует, что клиент подключен, и сообщение отправляется клиенту.
  • Подтвержденный URL-адрес WebSocket — я использовал правильный URL-адрес WebSocket. (ws://localhost:8080/ws?userId=1234).
  • Проверил клиент Flutter WebSocket – я использовал WebSocketChannel для подключения и прослушивания потока, но данные не получены в обратный вызов onData.
  • Использовал операторы print() во Flutter для отладки входящего сообщения, но оно никогда не печаталось.
    Вопросы:
  • Почему клиент Flutter не получает сообщения, отправленные сервером?
  • Есть ли какие-либо конкретные конфигурации WebSocket, которые мне нужно проверить или изменить либо на клиенте Flutter, либо на стороне сервера?
  • Существует ли известная проблема со связью WebSocket между сервером Netty и Flutter?
    Среда:
  • Версия Flutter: 3.x.x
  • Библиотека WebSocket: web_socket_channel
  • Сервер: сервер WebSocket на базе Netty
  • Среда тестирования: эмулятор Android/iOS (с локальным хостом или физическим устройством с IP-адресом)


Подробнее здесь: https://stackoverflow.com/questions/791 ... -websocket
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы Azure с транзитивной зависимостью Netty (NoClassDefFoundError: io/netty/resolver/AddressResolverGroup)
    Anonymous » » в форуме JAVA
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Нужны клиент для написания руководства WebSocket в C для STOMP WebSocket Server в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Нужны клиент для написания руководства WebSocket в C для STOMP WebSocket Server в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Почему мой клиент React с Next.js не получает сообщения, отправленные WebSocket на серверной части Spring Boot?
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Отправка сообщения с сервера на клиент в Ratchet WebSocket
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»