[Raspberry Pi] 라즈베리파이 간 유선 소켓 통신

한규진·2023년 7월 30일
0

라즈베리파이

목록 보기
2/2

오늘은 라즈베리파이 간 유선 소켓 통신에 대해 포스트 하겠다.
국내 블로그를 찾아봐도 라즈베리파이 간 유선 소켓 통신에 대한 이야기가 없는것 같았다...
사실 유선이라고 다를건 없다.
이번 포스트는 간단히 코드 설명만 하고 마치겠다.


1. 코드 설명

우선 서버가 될 라즈베리파이를 A, 클라이언트가 될 라즈베리파이를 B로 잡았다.
서버와 클라이언트 관련은 다음 블로그가 정리가 잘된것 같아 소개한다.
서버와 클라이언트
텍스트는 클라이언트에서 서버로만 보내지고 서버는 택스트를 받아 출력하는 프로그램이다.
B ➡️ A로 통신하는 코드이다.

[코드 실행 전 주의사항]
1. 이더넷선(LAN선)으로 라즈베리파이를 연결해야 한다.
2. 프로그램을 실행시킬 때에는 서버즉 A부터 코드를 실행시킨다.
3. soket라이브러리 설치를 확인한다.( 라즈베리파이4 64bit기준 기본으로 설치됨)
4. B코드에 A의 IP입력하기


2. 코드

라즈베리파이A (서버)

import socket

def start_server():
    host = '0.0.0.0'  # Bind to all interfaces
    port = 12345

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((host, port))
    s.listen(1)

    while True:
        conn, addr = s.accept()
        print(f"Connected by {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print("Received: ", repr(data))

start_server()

라즈베리파이B (클라이언트)

import socket

def send_data():
    host = '라즈베리파이_A의_IP'
    port = 12345

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))

    while True:
        user_input = input("Enter a message: ")
        s.sendall(user_input.encode())

try:
    send_data()
except KeyboardInterrupt:
    print("Stopped by User")

Ctrl+C로 클라이언트를 종료시킬 수 있다.


B코드에는 A의 IP가 필요하다.
A의 터미널에서

hostname -I

를 압력하면 IP가 나온다. 만약 두개가 나온다면 처음 나온 IP를 입력하자. (두번 쨰는 wifi IP이다.)

실행사진을 포스트 하며 글을 마치겠다. (왼쪽이 B, 오른쪽이 A)

profile
여러가지 찍먹중...

0개의 댓글