Study Record

[파이썬] 소켓 프로그래밍 본문

서버보안/리눅스 서버보안

[파이썬] 소켓 프로그래밍

초코초코초코 2021. 11. 24. 17:38
728x90

소켓 - Server

import socket
import sys

host = '127.0.0.1'
port = 4444


try:
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((host, port))
    server.listen(1)
    client, address = server.accept()
except Exception as e:
    sys.exit('Error:', e)
else:
    print("Connected by", address)
    recv_msg = b''
    while True:
        data = client.recv(1024)
        if not data:
            client.close()
            break
        recv_msg += data

    print(len(recv_msg), recv_msg)
finally:
    server.close()

소켓 - client

import socket
import sys

host = '127.0.0.1'
port = 4444

try:
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((host, port))
except Exception as e:
    sys.exit("Error: ", e)
else:
    client.sendall(open('plain.txt', 'rb').read())
finally:
    client.close()

 

소켓 에코 프로그램 - server

클라이언트에서 단순하게 메세지를 서버로 전송하고 그 메시지를 다시 클라이언트로 보내주는 프로그램이다.

# Echo server program
import socket

def main():
    HOST = ''		# 사용 가능한 모든 인터페이스 주소
    PORT = 4444		# 임의의 포트
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen(1)
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            while True:
                data = conn.recv(1024)
                if not data: break
                conn.sendall(data)


if __name__ == '__main__':
    main()

소켓 에코 프로그램 - client

import socket


def main():
    HOST = '127.0.0.1'
    PORT = 4444
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(b'Hello, world')
        data = s.recv(1024)
    print('Received', repr(data))


if __name__ == '__main__':
    main()
728x90