오늘은 라즈베리파이 간 유선 소켓 통신에 대해 포스트 하겠다.
국내 블로그를 찾아봐도 라즈베리파이 간 유선 소켓 통신에 대한 이야기가 없는것 같았다...
사실 유선이라고 다를건 없다.
이번 포스트는 간단히 코드 설명만 하고 마치겠다.
우선 서버가 될 라즈베리파이를 A, 클라이언트가 될 라즈베리파이를 B로 잡았다.
서버와 클라이언트 관련은 다음 블로그가 정리가 잘된것 같아 소개한다.
서버와 클라이언트
텍스트는 클라이언트에서 서버로만 보내지고 서버는 택스트를 받아 출력하는 프로그램이다.
즉 B ➡️ A로 통신하는 코드이다.
[코드 실행 전 주의사항]
1. 이더넷선(LAN선)으로 라즈베리파이를 연결해야 한다.
2. 프로그램을 실행시킬 때에는 서버즉 A부터 코드를 실행시킨다.
3. soket라이브러리 설치를 확인한다.( 라즈베리파이4 64bit기준 기본으로 설치됨)
4. B코드에 A의 IP입력하기
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()
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)