[flutter] 소켓 프로그래밍을 통한 플러터 앱간의 통신 방법

목차

들어가기

앱 개발에서 통신은 매우 중요한 요소입니다. 특히 플러터(Flutter) 앱에서는 다른 앱과의 통신이 필요한 경우가 많습니다. 이번 글에서는 소켓 프로그래밍을 통해 플러터 앱 간의 통신 방법에 대해 알아보겠습니다.

소켓 프로그래밍이란?

소켓 프로그래밍은 네트워크 간의 데이터 통신을 위해 사용되는 방법입니다. 소켓을 이용하여 서로 다른 디바이스나 앱 간에 데이터를 교환할 수 있습니다. 소켓은 IP 주소와 포트 번호를 사용하여 네트워크 연결을 설정하고, 데이터를 전송하고 수신합니다.

플러터 앱 간의 통신 방법

  1. 소켓 패키지 추가: 플러터에서 소켓 프로그래밍을 사용하기 위해 socket 패키지를 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가합니다:
    dependencies:
      socket: ^0.6.0
    
  2. 서버와 클라이언트 설정: 통신을 위해 서버와 클라이언트를 설정해야 합니다. 서버는 데이터를 수신하고 처리할 역할을 담당하며, 클라이언트는 데이터를 전송하고 서버의 응답을 받습니다.

  3. 소켓 연결: 서버와 클라이언트는 소켓을 이용하여 연결합니다. 서버는 특정 포트에서 소켓을 열고 클라이언트는 서버의 IP 주소와 포트 번호를 사용하여 연결합니다.

  4. 데이터 전송: 클라이언트는 소켓을 통해 데이터를 전송하고, 서버는 소켓을 통해 데이터를 수신합니다. 데이터는 특정 형식으로 인코딩되어 전송되며, 클라이언트와 서버는 서로 약속된 형식에 맞춰 데이터를 처리합니다.

예시 코드

다음은 플러터에서 소켓을 사용하여 서버와 클라이언트 간에 간단한 문자열을 주고 받는 예시 코드입니다.

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

void main() async {
  // 서버 설정
  ServerSocket server = await ServerSocket.bind('localhost', 8080);
  print('Listening on ${server.address}:${server.port}');

  server.listen((Socket socket) {
    // 클라이언트 연결 시
    print('Client connected: ${socket.remoteAddress}:${socket.remotePort}');

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

      // 데이터 전송
      socket.write('Server received: $message');
    });
  });

  // 클라이언트 설정
  Socket client = await Socket.connect('localhost', 8080);
  print('Connected to server: ${client.remoteAddress}:${client.remotePort}');

  // 데이터 전송
  String message = 'Hello from client!';
  client.write(utf8.encode(message));

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

    // 연결 종료
    client.close();
    server.close();
  });
}

참고 자료