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 데이터 송수신 확인
모두 정상적으로 작동합니다
유용하게 사용하세요 ~~
'프로그래밍 > Python' 카테고리의 다른 글
[Python Pandas] 1. 주피터 노트북 설치(Anaconda, Jupyter Notebook) (746) | 2020.08.19 |
---|---|
Python 멀티쓰레드 기반 실시간 채팅 프로그램(Queue, Socket , Thread) (717) | 2020.08.18 |
Python 한글 도메인 IP 자동 추출하기 (퓨니코드, punycode, nslookup) (866) | 2020.08.13 |
Python csv, txt 파일 병합, 내용 합치기 (738) | 2020.08.13 |
Python 국가명, 국가코드, 위도, 경도 조회(Geoip, mmdb) (952) | 2020.08.13 |