본문 바로가기
프로그래밍

👨‍💻 [Flutter] Flutter 에서 TCP/IP 통신을 위한 방법은 무엇이 있나요?

by 밝음의기둥 2024. 11. 19.
반응형

👨‍💻  안녕하세요, 윌리 프로젝트의 윌리 입니다.

Flutter 에서 TCP/IP 통신을 위한 방법은 무엇이 있는지 간략히 알아보았습니다.


질문 >

Flutter 에서 TCP/IP 통신을 위한 방법은 무엇이 있나요?

답변 >

Flutter에서 TCP/IP 통신을 구현하려면 Dart의 네트워크 관련 라이브러리를 사용합니다. TCP/IP 통신은 dart:io 패키지에서 제공하는 Socket 클래스를 통해 구현할 수 있습니다. 이를 사용하면 클라이언트-서버 간의 연결을 설정하고 데이터를 송수신할 수 있습니다.

TCP/IP 통신을 구현하는 주요 단계

  1. 서버에 연결하기:
    • 클라이언트에서 Socket 클래스를 사용하여 서버와 연결합니다.
    • IP 주소와 포트 번호를 사용해 특정 서버에 연결할 수 있습니다.
  2. 데이터 송수신:
    • 클라이언트는 서버로 데이터를 전송하거나 서버에서 데이터를 수신할 수 있습니다.
    • 데이터를 비동기로 처리하기 위해 Stream과 Sink를 사용합니다.
  3. 연결 종료:
    • 작업이 완료되면 소켓 연결을 닫아 리소스를 해제합니다.

TCP/IP 통신 구현 예제

클라이언트 예제

아래는 TCP 클라이언트가 서버에 연결하고 메시지를 송수신하는 예제입니다.

import 'dart:io';
import 'dart:convert';

void main() async {
  // 서버에 연결
  final socket = await Socket.connect('127.0.0.1', 8080);
  print('Connected to: ${socket.remoteAddress.address}:${socket.remotePort}');

  // 데이터 송신
  socket.write('Hello Server!');

  // 데이터 수신
  socket.listen((List<int> data) {
    print('Received: ${utf8.decode(data)}');
  });

  // 연결 종료
  socket.close();
  print('Connection closed.');
}


서버 예제

아래는 TCP 서버가 클라이언트 연결을 수락하고 데이터를 처리하는 예제입니다.

import 'dart:io';
import 'dart:convert';

void main() async {
  // 서버 소켓 생성
  final server = await ServerSocket.bind(InternetAddress.anyIPv4, 8080);
  print('Server started on port 8080');

  // 클라이언트 연결 대기
  server.listen((Socket client) {
    print('Connection from: ${client.remoteAddress.address}:${client.remotePort}');

    // 데이터 수신
    client.listen((List<int> data) {
      print('Received: ${utf8.decode(data)}');

      // 응답 전송
      client.write('Hello Client!');
    });

    // 연결 종료 이벤트 처리
    client.done.then((_) {
      print('Client disconnected.');
    });
  });
}


주요 구성 요소 설명

  1. Socket.connect:
    • TCP 클라이언트가 서버에 연결할 때 사용합니다.
    • IP 주소와 포트 번호를 지정하여 특정 서버에 접속합니다.
  2. ServerSocket.bind:
    • TCP 서버 소켓을 생성하여 클라이언트 연결을 수락합니다.
  3. socket.listen:
    • 소켓에서 들어오는 데이터를 비동기로 처리하기 위해 사용됩니다.
  4. 데이터 인코딩 및 디코딩:
    • 데이터를 전송하기 전 utf8.encode로 인코딩하고, 수신된 데이터를 utf8.decode로 디코딩합니다.
    • 이는 문자열 데이터를 바이트 형식으로 전송하고 복원하는 데 필요합니다.

에러 처리 및 안정성

TCP/IP 통신에서 예외 상황(네트워크 오류, 서버 응답 없음 등)에 대한 처리가 중요합니다.

try {
  final socket = await Socket.connect('127.0.0.1', 8080);
  socket.write('Hello Server!');
} catch (e) {
  print('Error: $e');
}


패키지를 활용한 TCP 통신

Dart의 기본 라이브러리 외에도 Flutter에서 TCP 통신을 더 쉽게 구현하기 위해 서드파티 패키지를 사용할 수 있습니다.

1. web_socket_channel

  • 웹소켓 기반의 TCP 통신을 구현할 때 사용합니다.
  • 클라이언트와 서버 간의 양방향 통신을 쉽게 처리할 수 있습니다.

2. socket_io_client

  • Flutter에서 Socket.IO 서버와 통신할 때 사용됩니다.
  • 실시간 통신 기능이 필요한 애플리케이션에서 많이 사용됩니다.

실용적인 사용 사례

  1. IoT 애플리케이션:
    • TCP/IP를 통해 IoT 기기와 데이터를 송수신합니다.
    • 실시간으로 기기의 상태를 확인하거나 제어할 수 있습니다.
  2. 채팅 애플리케이션:
    • TCP/IP 연결을 사용하여 클라이언트와 서버 간에 메시지를 실시간으로 주고받습니다.
  3. 데이터 스트리밍:
    • TCP를 사용하여 비디오, 오디오 또는 기타 데이터를 스트리밍합니다.

결론

Flutter에서 TCP/IP 통신은 dart:io의 SocketServerSocket 클래스를 사용하여 구현할 수 있으며, 비동기적으로 데이터를 송수신할 수 있습니다. 기본 제공되는 도구와 서드파티 패키지를 적절히 활용하면 IoT, 채팅 앱, 데이터 스트리밍 등 다양한 네트워크 기반 애플리케이션을 쉽게 구축할 수 있습니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형