새소식

컴퓨터 네트워크

소켓 프로그래밍 : UDP / TCP

  • -
728x90

소켓 프로그래밍

  • 클라이언트/서버 애플리케이션을 어떻게 빌드할 것인가에 대한 얘기
  • 두 개의 소켓 타입
  • UDP : 신뢰할 수 없는 데이터그램
  • TCP : 믿을 수 있는, 바이트 전송 지향성(위에서 내려온 경계에 관심이 없고 바로바로 메시지를 전송하는 거야)

 

애플리케이션 예시

  • 클라이언트는 키보드로부터 사용자가 치는 라인 커멘드를 읽고 이 문장을 서버에 보내야 한다
  • 서버는 해당 문장을 받아서 모두 대문자로 바꾼 후에 클라이언트에게 보내준다.
  • 클라이언트는 데이터를 받아서 스크린에 투영한다.

이 작업을 수행하는 클라이언트 측의 프로그램과 서버의 코딩을 파이썬으로 구현해보자

 

UDP를 사용할 경우, UDP는 연결의 개념이 없다. 영어로는 아래와 같이 말한다.

"no handshaking begore sending data"

따라서 sender는 명확하게 IP주소를 보내야 한다. 그래야지 목적지까지 패킷이 찾아갈 수 있어

reciever는 받은 패킷으로부터 senderd의 IP address와 포트 넘버를 추출해내서 응답할 때 사용해야 해. (커낵션이 따로 없으니까.)

 

 

Server Client
create socket, port = x:
serverSocket =
socket(AF_INETSOCK_DGRAM)







read datagram from
serverSocket
#그다음에 리플라이를 보내는과정 대문자로 바꾼다음에

write reply to
serverSocket
specifying
client address,
port number 








creat socket:
clientSocket =
socket(AF_INET,SOCK_DGRAM)

이제 아래로 내려 보내면,

Create datagram with serverIP address
And port = x; send datagram via
clientSocket

이제 서버로 보내는거야.











 

#Python UDPClient

from socket import 
serverName = 'hostname' # IPadrress
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)

message = raw_input('input lowercase sentence:)
clientSocket.sendto(message.encode(), (serverName, severPort))

modifiedMessage, severAddress = clientSocket.recvfrome(2048)
print modifiedMessage.decode()
clientSocket.close()



#UDP 서버 부분
from socket import
severPort = 12000
severSocket = socket(AF_INET, SOCK_DGRAM)
severSocket.bind((",serverPort))
print("The sever is ready to recieve")

while True:
	message, clientAddress = severSocket.recvfrome(2048)
    modifiedMessage = message.decode().upper()
    serverSocket.sendto(mdifiedMessage.encode() clientAddress())

 

 

 

Socket programming with TCP 

서버 소켓이 항상 클라이언트의 요청에 따른 welcome socket을 가지고 있어

 

seve client
create socket,
port =x, for incoming
request:
severSocket =socket()




wait for incoming
connetion request
connetionSocket =
severScoket.accept()
create socket,
connet to hostid, prot = x
clientSocket = socket()

sen
#TCP client

from socket import
severName = 'severname'
severPort = 12000
clentSocket = socket(AF _INET, SOCK_STREAM)
clientSocket.connet((severName,severPort))
sentence = reaw_input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSEntence = clientSocket.recv(1024)
print('From Sever:' ~~



#TCP sever
from socket import

severPort = 12000
clentSocket = socket(AF _INET, SOCK_STREAM)
severSocket.bind(('',severPort))
severSocket.listen(1)
print 'The sever is ready to receive'
while True:
	connetionSocket, addr = severSocket.accept()
    
    sentence = connectionSocket.recv(10244).decode()
    capitalizedSentence = sentence.upper()
    connetionSocket.send(capitalizedSentence.encode()) 
    #누구에게 갈 소켓인지 정해져있기 때문에 어드레스를 따로 지정 하지 않아줘도 된다.
    그 이후에 커낵션을 끊어주면 된다.

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.