파이썬

우분투 컴퓨터에 소켓 통신 무조건 따라하기 (1) , 설치 및 예제

LEEHANDS 2023. 11. 8. 17:21
반응형
Description COMMAND
OS UBUNTU 22.04.3 LTS lsb_release -a
GPU NVIDIA GTX 1650 nvidia-smi
CPU Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz lscpu
KERNEL 6.3.0-rc3+ uname -r

 

우분투 시스템은 위와 같고 소켓은 GPT 도움으로 예제소스를 쉽고 빠르게 테스트 했다.

 

먼저 소켓 서버 코드

import socket

# 서버의 IP 주소와 포트 번호를 설정합니다.
# 여기서 ''는 모든 네트워크 인터페이스에서 들어오는 연결을 수락한다는 것을 의미합니다.
# 실제 서버의 IP 주소로 변경해야 할 수도 있습니다.
SERVER_HOST = ''
SERVER_PORT = 50081

# 소켓 객체를 생성합니다.
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 소켓을 주소에 바인드합니다.
server_socket.bind((SERVER_HOST, SERVER_PORT))

# 소켓이 클라이언트 연결을 듣기 시작합니다.
server_socket.listen(5)
print(f"[*] Listening as {SERVER_HOST}:{SERVER_PORT}")

# 클라이언트가 연결되기를 기다립니다.
client_socket, client_address = server_socket.accept()
print(f"[+] {client_address} is connected.")

# 클라이언트로부터 데이터를 받고 응답을 보냅니다.
try:
    while True:
        message = client_socket.recv(1024).decode()
        if not message:
            # 클라이언트가 연결을 종료했음
            break
        print(f"Received from {client_address}: {message}")
        client_socket.send("Received your message.".encode())
finally:
    # 연결을 종료합니다.
    client_socket.close()
    server_socket.close()
    print("[*] Connection closed.")

 

다음은 클라이언트 소스 코드

 

import socket

# 서버의 IP 주소와 포트 번호를 설정합니다.
# 'localhost'나 '127.0.0.1'은 로컬 시스템을 가리킵니다.
# 실제 서버의 IP 주소로 변경해야 할 수도 있습니다.
SERVER_HOST = 'nts.leehands.com'
SERVER_PORT = 50081

# 소켓 객체를 생성합니다.
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 지정된 호스트와 포트에 연결합니다.
client_socket.connect((SERVER_HOST, SERVER_PORT))
print(f"[*] Connected to {SERVER_HOST}:{SERVER_PORT}")

# 서버에 메시지를 전송합니다.
client_socket.send("Hello, Server!".encode())

# 서버의 응답을 받습니다.
response = client_socket.recv(1024).decode()
print(f"Server said: {response}")

# 소켓 연결을 종료합니다.
client_socket.close()

 

그리고 내부 IP 는 잘되지만 외부 IP 으로 접속하면 안될 수 있다. 

그것은 바로 우분투의 방화벽 설정 때문이다. 

아래와 같이 방화벽 허용을 해줍니다.

sudo ufw allow 50081/tcp
sudo ufw allow 50081/udp

 

 

이제 소켓 통신이 잘되는 것을 가볍게 확인할 수 있다.

 

다음시간에 봐요~~`

반응형