네트워크
파이썬으로 소켓프로그래밍 구현
창민이 개발일지
2022. 6. 22. 13:58
UDP
- User Datagram Protocol
- 데이터그램: 비연결 지향형
- SOCK_DGRAM
UDP 메소드
- recvfrom(int length): byte의 길이 만큼 다른 소켓에서 보낸 값을 받아온다.(하지만 length의 길이 만큼 가져온다는 보장은 없다.)
- sendto(byte[] packet, clientAddress): 해당 주소를 가진 client에게 byte[]을 보낸다.
Client Socket
from socket import socket
host = "192.168.1.112" # 접속할 호스트 IP
port = 12000 # 접속할 프로세스 port
clientSocket = socket(AF_INET, SOCK_DGRAM)
try:
message = input("Input lowercase sentence:")
clientSocket.sendto(message.encode(),(host,port)) # UTF-8로 encoding해서 보내주어야 된다.
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
except Exception as e:
print("Error: ",e)
clientSocket.close()
clientSocket.close()
Server Socket
from socket import socket
host = "192.168.1.112" # 서버 IP
port = 12000 # Client가 접속할 서버 내 프로세스 포트번호
serverSocket = socket(AF_INET, SOCK_DGRAM)
try:
serverSockefrt.bind((host, port)) # 소켓의 host와 port를 지정해준다.
print("The server is ready to receive")
while True:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(),clientAddress)
if(message.decode() == "close"):
break
print(message.decode())
except Exception as e:
print("Error: ",e)
serverSocket.close()
TCP
- Transmission Control Protocol
- 스트림: 연결 지향형
- SOCK_STREAM
TCP 메소드
- bind(String host, int port):
- 통신을 하기 위해서는 통신 기기간(여기서는 컴퓨터) 데이터가 어디에서 오고 어디로 가는지를 알아야 한다.
- 이렇게 하기 위해 host와 port를 바인드(묶어주기) 해주어야 한다.
- recv(int length): byte의 길이 만큼 다른 소켓에서 보낸 값을 받아온다.(recvfrom처럼 address를 지정할 수 없기 때문에 미리 소켓끼리 연결해 주어야 한다.)
- send(byte[] packet, clientAddress): 해당 주소를 가진 client에게 byte[]을 보낸다.
- listen(int number):
- 클라이언트들이 접근을 할때 수신 대기열을 만들어서 몇개의 클라이언트를 대기 시킬지 설정.
- accpet(): 클라이언트의 연결을 기달린다.
Client Socket
from socket import socket
host = "192.168.1.112"
port = 12000
clientSocket = socket(AF_INET,SOCK_STREAM)
try:
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((host,port))
message = input("Input lowercase sentence:")
clientSocket.send(message.encode())
modifiedSentence = clientSocket.recv(1024)
print("From Server:", modifiedMessage.decode())
except Exception as e:
print("Error:",e)
clientSocket.close()
Server Socket
from socket import socket
host = "192.168.1.112" # 서버 IP
port = 12000 # Client가 접속할 서버 내 프로세스 포트번호
serverSocket = socket(AF_INET,SOCK_STREAM)
try:
serverSocket.bind((host,port))
serverSocket.listen(1)
print("The server is ready to receive")
while True:
clientSocket, addr = serverSocket.accept()
message = clientSocket.recv(1024).decode()
print(message)
if(message == "close"):
clientSocket.close()
break
clientSocket.send(message.encode())
clientSocket.close()
except Exception as e:
print("Error:",e)
serverSocket.close()