Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 가운데를말해요
- 백준괄호
- 운영체제
- 윤곽선검출
- 냅색알고리즘
- 이것이자바다
- 이것이자바다9장
- 코테
- 백준9012
- BOJ1655
- 카카오코테
- 컴퓨터비전
- 백준평범한배낭
- 백준가운데를말해요
- 백준
- 코드트리
- java
- 코딩테스트실력진단
- 백준10828
- 백준온라인저지
- 이것이자바다확인문제
- 스파르타코딩클럽
- 2019카카오코테
- 딥러닝
- 백준스택
- 웹개발기초
- KT포트포워딩
- BOJ
- 합성곱연산
- 확인문제
Archives
- Today
- Total
코딩하는 락커
2. 어플리케이션 계층 2 본문
2.7 소켓 프로그래밍 : 네트워크 어플리케이션 생성
- 일반적인 네트워크 애플리케이션은 2개의 서로 다른 종단 시스템에 존재하는 클라이언트 프로그램과 서버 프로그램으로 구성됨
- 이들 두 프로그램을 수행하면 클라이언트와 서버 프로세스가 생생됨
- 두 프로세스가 소켓으로 읽고(Read), 소켓에 쓰기(Write)를 통해서 서로 통신함
- 개발 단계 동안 개발자가 우선해야 할 결정 중 하나는 그 애플리케이션이 TCP를 이용하는지, UDP를 이용하는지에 대한 것임
- TCP: 연결지향성 서비스이고 신뢰적 바이트 스트림 채널을 제공하며 이 채널을 통해 데이터가 두 종단 시스템 사이를 흐르게 함
- UDP: 비연결형이고 한 종단 시스템에서 다른 곳으로 데이터를 독립적인 패킷으로 만들어서 보내며 전송에 대한 보장은 하지 않음
- TCP 프로토콜 선택시 TCP Socket을 사용하고 UDP 프로토콜 선택시 UDP Socekt을 사용함
- TCP Socket: Socket Stream이라고 불림
- UDP Socket: Socket Datagram
UDP 소켓 프로그래밍
- UDP를 이용한 클라이언트-서버 어플리케이션
서버 | 클라이언트 |
port=x 인 소켓 생성 | |
소켓 생성 | |
serverIP와 port=x인 데이터그램 생성 | |
client 소켓을 통해 데이터그램 통신 | |
serversocket으로부터 UDP 세그먼트 읽기 | |
serversocket에 응답하기: 클라이언트 주소, 포트번호 명시 | |
clientsocket 읽기 | |
clientsocket 닫기 |
- UDP_Client.py
# socket 모듈: 네트워크 통신의 기본 구성
from socket import *
# serverName 은 128.138.32.126 or cis.ploy.edu
serverName = "servername"
serverPort = 12000
# client 소켓 생성
# AF_INET : Ipv4 사용
# socket.SOCK_DGRAM: UDP 소켓
clientSocket = socket(socket.AF_INET, socket.SOCK_DGRAM)
# 키보드 입력을 통해 message 입력
message = raw_input('Input lawercase sentence:')
# 목적지 호스트로 전송
clientSocket.sendto(message, (serverName, serverPort))
# 패킷을 보낸 후 서버로부터 데이터 수신 기다리기
# modifiedMessage: 패킷 데이터
# severAddress: 서버 IP 주소, 서버 포트번호
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage)
clientSocket.close()
- UDP_Server.py
# socket 모듈: 네트워크 통신의 기본 구성
from socket import *
# serverPort에 12000 할당
serverPort = 12000
# server 소켓 생성
# AF_INET : Ipv4 사용
# socket.SOCK_DGRAM: UDP 소켓
serverSocket = socket(socket.AF_INET, socket.SOCK_DGRAM)
# 포트번호 12000을 서버의 소켓에 할당
serverSocket.bind(('', serverPort))
print("The server is ready to receive")
# 클라이언트로부터 계속해서 패킷을 수신하고 처리할 수 있도록 while 루프 사용
while True:
# message: 패킷 데이터
# clientAddress: 패킷의 소스 주소 (클라이언트의 IP와 포트번호)
message, clientAddress = serverSocket.recvfrom(2048)
# 클라이언트로부터 받은 메시지를 대문자로 변환
modifiedMessage = message.decode().upper()
# 클라이언언트의 주소와 변환된 메시지를 패킷으로 만들어 서버의 소켓에 보냄
serverSocket.sendto(modifiedMessage, clientAddress)
TCP 소켓 프로그래밍
- TCP를 이용한 클라이언트-서버 어플리케이션
서버 | 클라이언트 |
port=x인 소켓 생성 | |
입력 연결 요청 대기 | |
serverIP, port=x에 연결되는 소켓 생성 | |
clientSocekt을 이용해서 요청 보내기 | |
connectionSocket에서 요청 읽기 | |
connectionSocket에서 응답 쓰기 | |
clientSocekt에서 응답 읽기 | |
connectionSocket닫기 | clientSocekt닫기 |
- TCP_Client.py
# socket 모듈: 네트워크 통신의 기본 구성
from socket import *
# serverName 은 128.138.32.126 or cis.ploy.edu
serverName = "servername"
serverPort = 12000
# client 소켓 생성
# AF_INET : Ipv4 사용
# socket.SOCK_DGRAM: TCP 소켓
clientSocket = socket(socket.AF_INET, socket.SOCK_STREAM)
# 클라이언트가 TCP 소켓을 이용하여 서버로 데이터를 보내기 전에 TCP연결이 먼저 클라이언트와 서버 사이에 설정되어야 함
# 클라이언트와 서버 간의 TCP 연결을 설정함
clientSocket.connect((serverName, serverPort))
# 키보드 입력을 통해 sentence 입력
sentence = raw_input('Input lawercase sentence:')
# setence에 있는 바이트를 클라이언트 소켓을 통해 TCP 연결로 보냄
clientSocket.send(sentence.encode())
# 패킷을 보낸 후 서버로부터 데이터 수신 기다리기
# modifiedMessage: 패킷 데이터
# severAddress: 서버 IP 주소, 서버 포트번호
modifiedMessage, serverAddress = clientSocket.recvfrom(1024)
print(modifiedMessage)
clientSocket.close()
- TCP_Server.py
# socket 모듈: 네트워크 통신의 기본 구성
from socket import *
# serverPort에 12000 할당
serverPort = 12000
# server 소켓 생성
# AF_INET : Ipv4 사용
# socket.SOCK_DGRAM: TCP 소켓
serverSocket = socket(socket.AF_INET, socket.SOCK_STREAM)
# 포트번호 12000을 서버의 소켓에 할당
# 출입문을 설정하고 임의의 클라이언트가 문을 두드리기를 기다림
serverSocket.bind(('', serverPort))
# 서버가 클라이언트로부터 TCP 연결 요청을 듣도록 함
# 연결의 최대 수를 1로 설정
serverSocket.listen(1)
print("The server is ready to receive")
# 클라이언트로부터 계속해서 패킷을 수신하고 처리할 수 있도록 while 루프 사용
while True:
# 클라이언트가 문을 두드리면 클라이언트에게 지정된 connectionSocekt이라는 새로운 소켓을 서버에 생성함
connectionSocket, addr = serverSocket.accept()
# sentence: 패킷 데이터
setence = connectionSocket.recv(1024).decode()
# 클라이언트로부터 받은 메시지를 대문자로 변환
capitalizedSentence = setence.upper()
# 클라이언언트의 주소와 변환된 메시지를 패킷으로 만들어 서버의 소켓에 보냄
serverSocket.send(capitalizedSentence.encode())
connectionSocket.close()
'🌐 네트워크' 카테고리의 다른 글
3. 전송 계층 3 (0) | 2022.03.29 |
---|---|
3. 전송 계층 2 (0) | 2022.03.28 |
3. 전송 계층 1 (0) | 2022.03.28 |
2. 어플리케이션 계층 1 (0) | 2022.03.23 |
1. 컴퓨터 네트워크 기본 (0) | 2022.03.23 |
Comments