๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/๋„คํŠธ์›Œํฌ

[python] TCP, UDP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์‹ค์Šต

by syLim___ 2023. 7. 19.
728x90

 

1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

2. ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๊ธ€์ž๋“ค์„ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ณ  ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•œ๋‹ค.

3. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

 


 

โœ… UDP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

๐Ÿฅ UDPClient.py

from socket import *
serverName = '127.0.0.1'    # ์„œ๋ฒ„ IP์ฃผ์†Œ
serverPort = 12000          # ์„œ๋ฒ„ ํฌํŠธ๋ฒˆํ˜ธ
clientSocket = socket(AF_INET, SOCK_DGRAM) # ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์ƒ์„ฑ (IPv4, UDP์†Œ์ผ“)
message = input('Input lower sentence:')    # ์‚ฌ์šฉ์ž ์ž…๋ ฅ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ

# ํŒจํ‚ท์„ ๋ถ™์ด๊ณ  ๋ชฉ์ ์ง€ ํ˜ธ์ŠคํŠธ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ๊ธฐ๋‹ค๋ฆฌ๊ธฐ
clientSocket.sendto(message.encode(), (serverName, serverPort))

modifiedMessage, serverAddress = clientSocket.recvfrom(2048) # ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ 
print(modifiedMessage.decode()) # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
clientSocket.close() # ์†Œ์ผ“์„ ๋‹ซ๊ณ  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

 - ํŒจํ‚ท์€ ์„œ๋ฒ„๋กœ ์ „์†ก๋˜๊ธฐ ์ „์— ์ถœ๋ฐœ์ง€ ์ฃผ์†Œ(์ถœ๋ฐœ์ง€ IP, ์ถœ๋ฐœ์ง€ ํฌํŠธ๋ฒˆํ˜ธ)์™€ ๋ชฉ์ ์ง€ ์ฃผ์†Œ(๋ชฉ์ ์ง€ IP, ๋ชฉ์ ์ง€ ํฌํŠธ๋ฒˆํ˜ธ)๊ฐ€ ๋ถ™๊ฒŒ ๋˜๋Š”๋ฐ,

    ์ด ์ž‘์—…์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๊ณ , os๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. (line 8)

 

๐Ÿฅ UDPServer.py

from socket import *
serverName = '127.0.0.1'    # ์„œ๋ฒ„ IP์ฃผ์†Œ
serverPort = 12000          # ์„œ๋ฒ„ ํฌํŠธ๋ฒˆํ˜ธ
clientSocket = socket(AF_INET, SOCK_DGRAM) # ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์ƒ์„ฑ (IPv4, UDP์—ฐ๊ฒฐ)
message = input('Input lower sentence:')    # ์‚ฌ์šฉ์ž ์ž…๋ ฅ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ

# ํŒจํ‚ท์„ ๋ถ™์ด๊ณ  ๋ชฉ์ ์ง€ ํ˜ธ์ŠคํŠธ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ๊ธฐ๋‹ค๋ฆฌ๊ธฐ
clientSocket.sendto(message.encode(), (serverName, serverPort))

# ํŒจํ‚ท์—๋Š” ์ถœ๋ฐœ์ง€ ์ฃผ์†Œ(์ถœ๋ฐœ์ง€ ip, ์ถœ๋ฐœ์ง€ ํฌํŠธ๋ฒˆํ˜ธ)์™€ ๋ชฉ์ ์ง€ ์ฃผ์†Œ(๋ชฉ์ ์ง€ ip, ๋ชฉ์ ์ง€ ํฌํŠธ๋ฒˆํ˜ธ)๊ฐ€ ๋ถ™๊ฒŒ ๋˜๋Š”๋ฐ,
# ์ด ์ž‘์—…์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํ•˜์ง€ ์•Š๊ณ  os๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

modifiedMessage, serverAddress = clientSocket.recvfrom(2048) # ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ 
print(modifiedMessage.decode()) # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
clientSocket.close() # ์†Œ์ผ“์„ ๋‹ซ๊ณ  ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

 

๐Ÿฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒฐ๊ณผํ™•์ธ

 - ํ„ฐ๋ฏธ๋„ ๋‘ ๊ฐœ ์ผœ์„œ ํ•˜๋‚˜๋กœ๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์„ ์ผœ๋†“๊ณ , ๋‹ค๋ฅธ ์œˆ๋„์šฐ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ๋ณด์•˜๋‹ค.

 - ๋Œ€๋ฌธ์ž๋กœ ์ž˜ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅํ•ด์ค€ ๊ฒƒ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค

 


 

โœ… TCP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

๐Ÿฅ TCPClient.py

from socket import *
serverName = '127.0.0.1'    # ์„œ๋ฒ„ IP
serverPort = 12000          # ์„œ๋ฒ„ ํฌํŠธ๋ฒˆํ˜ธ
clientSocket = socket(AF_INET, SOCK_STREAM) # ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“ ์ƒ์„ฑ (IPv4, TCP์†Œ์ผ“)
clientSocket.connect((serverName,serverPort)) # TCP์—ฐ๊ฒฐ ์‹œ์ž‘. ๊ณง๋ฐ”๋กœ 3-way handshake ์ˆ˜ํ–‰๋˜๊ณ  TCP์—ฐ๊ฒฐ์ด ๋œ๋‹ค
sentence = input('Input lowercase sentence:') # ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฌธ์žฅ ์ž…๋ ฅ๋ฐ›๊ธฐ
clientSocket.send(sentence.encode()) # TCP์—ฐ๊ฒฐ๋กœ sentence๋ฅผ ์ „์†กํ•˜๊ณ , ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ๊ธฐ๋‹ค๋ฆฐ๋‹ค
modifiedSentence = clientSocket.recv(1024) # ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ๋ฐ›๋Š”๋‹ค
print('From Server:', modifiedSentence.decode()) # ๊ฒฐ๊ณผ์ถœ๋ ฅ
clientSocket.close()

 

๐Ÿฅ TCPServer.py

from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM) # ์„œ๋ฒ„ ์†Œ์ผ“ ์ƒ์„ฑ (IPv4, TCP์†Œ์ผ“)
serverSocket.bind(('', serverPort)) # ์„œ๋ฒ„ ์†Œ์ผ“๊ณผ ํฌํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉ
serverSocket.listen(1) # ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ TCP ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋“ฃ๋Š”๋‹ค
print('The server is ready to receive')
while True:
    connectionSocket, addr = serverSocket.accept() # ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด ์†Œ์ผ“(connectionSocket)์„ ๋งŒ๋“ ๋‹ค.
    # ๊ณง๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ handshaking์„ ์™„๋ฃŒํ•˜๊ณ , TCP์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค
    
    sentence = connectionSocket.recv(1024).decode()     # ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ sentence๋ฅผ ๋ฐ›์•„์„œ
    capitalizedSentence = sentence.upper()              # ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜๊ณ 
    connectionSocket.send(capitalizedSentence.encode()) # ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•œ๋‹ค

    connectionSocket.close() # ์„œ๋ฒ„์†Œ์ผ“์€ ์—ด์–ด๋‘๊ณ , ์—ฐ๊ฒฐ์†Œ์ผ“์€ ๋‹ซ๊ธฐ

 

๐Ÿฅ ์‹คํ–‰

 

728x90