>  기사  >  백엔드 개발  >  Flutter 앱은 Docker 컨테이너의 UDP 서버에 보낼 수 있지만 서버에서 보낸 데이터를 받을 수는 없습니다.

Flutter 앱은 Docker 컨테이너의 UDP 서버에 보낼 수 있지만 서버에서 보낸 데이터를 받을 수는 없습니다.

WBOY
WBOY앞으로
2024-02-09 20:00:09626검색

Flutter 앱은 Docker 컨테이너의 UDP 서버에 보낼 수 있지만 서버에서 보낸 데이터를 받을 수는 없습니다.

Flutter 앱은 Docker 컨테이너의 UDP 서버로 보낼 수 있지만 서버에서 보낸 데이터를 받을 수는 없습니다. 이는 Flutter 애플리케이션에서 UDP 프로토콜을 사용하여 Docker 컨테이너에서 실행되는 서버에 데이터를 보낼 수 있음을 의미합니다. 그러나 서버가 애플리케이션에 데이터를 보내려고 하면 Flutter 애플리케이션이 데이터를 수신할 수 없습니다. 이로 인해 일부 특정 애플리케이션 시나리오에서는 제한이 발생할 수 있으므로 Flutter 애플리케이션을 개발할 때 이에 주의해야 합니다.

질문 내용

현재 Go에서 Flutter 모바일 앱과 통신하는 백엔드 UDP 서비스를 개발 중입니다.

UDP 서비스 코드는 다음과 같습니다:

으아아아

지금까지 서비스는 docker를 사용하여 실행 중이며 flutter 애플리케이션에서 보낸 데이터를 받을 수 있지만, 애플리케이션은 서버에서 다시 보낸 데이터를 받을 수 없습니다.

다음은 메시지 수신 및 전송을 위한 Flutter 코드 조각입니다.

으아아아

udp 서비스의 dockerfile은 다음과 같습니다.

으아아아

실행하려면 다음 명령을 사용합니다.

  1. docker 构建 --rm -t udp-go:alpha .
  2. docker run -d -p 8080:8080/udp --name go-udp udp-go:alpha

저는 /udp를 사용하여 컨테이너의 udp 포트를 docker 호스트의 8080 포트에 매핑합니다(https://docs.docker.com/config/containers/container-networking/)

그러나 이는 서비스에 데이터를 보내는 것만 허용합니다. Docker 로그를 확인하면 서비스가 실제로 데이터를 수신하고 있는 것으로 나타나기 때문에 이를 알고 있습니다. docker를 사용하여 서비스를 실행하는 대신 일반 go run를 사용하면 애플리케이션에서 메시지를 보내고 받을 수 있습니다. 이 문제를 어떻게 해결할 수 있나요?

편집: 추가하려고 expose 8080udp 添加到 dockerfile 而不仅仅是 expose 8080했지만 여전히 같은 오류가 발생합니다.

해결 방법

여기서 문제는 Flutter 코드 자체에 있는 것으로 나타났습니다. 아래 코드 조각은 유효한 코드 조각입니다.

으아아아

udp 코드를 사용할 때는 dart가 패킷을 완전히 수신하지 못했을 수 있으므로 청취하는 동안 소켓을 닫는 대신 ondone에서 소켓을 닫아야 합니다.

위 내용은 Flutter 앱은 Docker 컨테이너의 UDP 서버에 보낼 수 있지만 서버에서 보낸 데이터를 받을 수는 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제