Python Socket Programming Start !!

 

소켓 통신이란?

단말간에 네트워크를 통해 데이터를 주고 받기 위한 접속점을 의미한다.

소켓연결 방식은 TCP와 UDP로 나뉘는데 TCP의 경우 연결지향형 통신으로 3 hanshake를 통해 미리 연결을 맺어 놓고 데이터를 주고 받는 방식으로 신뢰성을 보장하는 프로토콜이다.

이에 반해 UDP는 비연결 통신으로 말그대로 상호간에 연결을 하지 않고 그때그때 데이터를 주고 받는 방식으로 신뢰성은 보장되지 않지만 속도가 빠른 장점이 있다.

 

1. TCP Client Socket

import socket


#TCP Client
if __name__ == '__main__':
    client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #TCP Socket
    Host = 'localhost' #통신할 대상의 IP 주소
    Port = 9000  #통신할 대상의 Port 주소
    client_sock.connect((Host, Port)) #서버로 연결시도
    print('Connecting to ', Host, Port)

    while True:
        print('Client >> ', end='')
        send_data = bytes(input().encode()) #사용자 입력
        client_sock.send(send_data) #Client -> Server 데이터 송신
        recv_data = client_sock.recv(1024).decode() #Server -> Client 데이터 수신
        print('Server >> ' + str(recv_data))

 

2. TCP Server Socket

import socket


#TCP Echo Server
if __name__ == '__main__':
    HOST = '' #수신 받을 모든 IP를 의미
    PORT = 9000 #수신받을 Port
    server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #TCP Socket
    server_sock.bind((HOST, PORT)) #소켓에 수신받을 IP주소와 PORT를 설정
    server_sock.listen(1) #소켓 연결, 여기서 파라미터는 접속수를 의미
    conn, addr = server_sock.accept() #해당 소켓을 열고 대기
    print('Connected ' + str(addr))

    while True:
        data = conn.recv(1024) #Client -> Server 데이터 수신
        print('Client >> ' + str(data))
        conn.sendall(data) #Server -> Client 데이터 송신

 

3. Client <-> Server 데이터 송수신 확인

 

 

=============================================================

 

4. UDP Client Socket

import socket

#UDP Client
if __name__ == '__main__':
    client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #UDP Socket
    Host = 'localhost' #통신할 대상의 IP 주소
    Port = 9000 #통신할 대상의 Port 주소

    while True:
        print('Client >> ', end='')
        send_data = bytes(input().encode()) #사용자 입력
        client_sock.sendto(send_data, (Host, Port)) #Client -> Server 데이터 송신
        recv_data, addr = client_sock.recvfrom(1024)#Server -> Client 데이터 수신
        print('Server >> ' + str(recv_data.decode()))

 

5. UDP Server Socket

import socket

#UDP Echo Server
if __name__ == '__main__':

    server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #UDP Socket
    HOST = '' #수신 받을 모든 IP를 의미
    PORT = 9000 #수신받을 Port
    server_sock.bind((HOST, PORT)) #소켓에 수신받을 IP주소와 PORT를 설정

    while True:
        data, addr = server_sock.recvfrom(1024) #Client -> Server 데이터 수신
        print('Client >> ' + str(data))
        server_sock.sendto(data, (addr)) #Server -> Client 데이터 송신

 

6. Client <-> Server 데이터 송수신 확인

 

 

모두 정상적으로 작동합니다

유용하게 사용하세요 ~~

+ Recent posts