from socket import *
serverPort = 54321
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('127.0.0.1', serverPort))
print("The server is ready to receive")
while True:
data, clientAddress = serverSocket.recvfrom(4096)
modifiedData = data.decode().upper()
serverSocket.sendto(modifiedData.encode(), clientAddress)
serverSocket = socket(AF_INET, SOCK_DGRAM) : 소켓을 생성하는 코드, SOCK_DGRAM가 UDP 통신방식임을 의미한다.
serverSocket.bind(('127.0.0.1', serverPort)) : 통신을 위해 bind함수로 port를 열어주는 것이다.
data, clientAddress = serverSocket.recvfrom(4096) : 클라이언트로부터 문자열을 전달 받기 위한 코드
recvfrom(4096) : 이 숫자는 버퍼의 크기
modifiedData = data.decode().upper() : 클라이언트에서 문자 데이터를 보낼때 byte타입으로 왔기 때문에 메시지를 decode해야함
serverSocket.sendto(modifiedData.encode(), clientAddress) : 클라이언트에게 문자열 보내기, UDP 통신처럼 연결하지 않은 상태에서 메시지를 전송하거나 수신할 때, sendto함수와 recvfrom 함수를 사용한다.
while문에서 client를 기다리는 것이다.
from socket import *
serverName = '127.0.0.1'
serverPort = 54321
clientSocket = socket(AF_INET, SOCK_DGRAM)
data = input('Input lowercase sentence : ')
clientSocket.sendto(data.encode(), (serverName, serverPort))
modifiedData, serverAddress = clientSocket.recvfrom(4096)
print(modifiedData.decode())
clientSocket.close()
clientSocket = socket(AF_INET, SOCK_DGRAM) : 소켓 생성해주기
clientSocket.sendto(data.encode(), (serverName, serverPort)) : bind가 클라이언트에서는 필요없다.
UDP와 달리 TCP는 연결지향 프로토콜로, 클라이언트와 서버가 서로에게 데이터를 보내기 전에 먼저 TCP 연결을 설정할 필요가 있음을 의미한다. TCP 연결의 한쪽은 클라이언트 소켓에 연결되고 다른 쪽은 서버 소켓에 연결된다.
from socket import *
serverPort = 8781
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('127.0.0.1', serverPort))
serverSocket.listen(1)
print("The server is ready to receive")
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()
serverSocket = socket(AF_INET, SOCK_STREAM) : 소켓을 생성하는 부분, SOCK_STREAM은 TCP 방식을 사용함을 의미한다.
serverSocket.bind(('127.0.0.1', serverPort)) : bind를 통해 port를 열어준다.
serverSocket.listen(1): 한번에 연결할 수 있는 사용자의 수를 나타냄, 한명만 연결가능함을 의미
while 문은 클라이언트의 응답을 기다리는 것.
connectionSocket, addr = serverSocket.accept() : accept메소드는 실행하면 연결 요청이 있을 때까지 대기 상태로 진입해서 연결에 성공하게 되면 client의 정보를 반환한다.
sentence = connectionSocket.recv(1024). : udp와 다르게 from이 안붙는데, accept를 할때 이미 client에 대한 정보가 다 들어 있기 때문이다. 따라서 send부분도 다르다.
from socket import *
serverName = '127.0.0.1'
serverPort = 8781
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
sentence = input('Input lowercase sentence :')
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print("from Server : ", modifiedSentence.decode())
clientSocket.close()