성균관대학교 소프트웨어학과 추현승 교수님의 2021년도 1학기 네트워크 개론 수업 과제 입니다.
아래 링크에서 수행했던 클라이언트 서버 프로그램에서 서버 프로그램이 멀티쓰레딩이 가능하도록 바꾸는 과제 입니다.
[Python3/컴퓨터 네트워크] 소켓 프로그래밍 : html request를 보내는 클라이언트와 request 받은 파일을
성균관대학교 소프트웨어학과 추현승 교수님의 2021년도 1학기 네트워크 개론 수업 과제 입니다. 서버 프로그램의 스켈레톤 코드가 주어지고, 빈 코드를 채워 서버 프로그램을 완성하고 이 서버
seungyooon.tistory.com
코드에 대한 설명은 주석을 참고해주세요
server.py
#import socket module
from socket import *
#import threading module for multiprocessing
import threading
#receiving request
def service():
try:
#get messages from client througth socket
message = connectionSocket.recv(65535).decode()
#get requested file name
filename = message.split()[1]
#open file that named requeste file name
f = open(filename[1:])
outputdata = f.read()
f.close()
#add HTTP header line to output data to tell HTTP status
outputdata = 'HTTP/1.1 200 OK\r\n\r\n' + outputdata
#send output data (http status + requested file contents)
connectionSocket.send(outputdata.encode())
connectionSocket.close()
print("OK!")
#handle error
except IOError:
#Send response message for file not found
outputdata = 'HTTP/1.1 404 Not Found\r\n\r\n'
#Close client socket
connectionSocket.close()
#Prepare a sever socket - TCP
serverSocket = socket(AF_INET, SOCK_STREAM)
serverPort = 12345
serverSocket.bind(("", serverPort))
#Listen 100 sockets at the same time
serverSocket.listen(100)
while True:
#Establish the connection
print('Ready to serve...')
connectionSocket, addr = serverSocket.accept()
#Create thread queue for multithreading
q = threading.Thread(target=service)
#start to service in order to q
q.start()
#close server socket
serverSocket.close()
client.py
from socket import *
serverName = '127.0.0.1'
serverPort = 12345
requestFilename = '/requestedFile.html'
responseFilename = 'responsedFile.html'
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
request = 'GET %s %s %s' %(requestFilename, serverName, serverPort)
clientSocket.send(request.encode())
result = clientSocket.recv(65535)
status = int(result.decode().split('\n')[0].split(' ')[1])
filecontent = result.split('\r\n')[2:]
if (status == 200) :
f = open(responseFilename, 'wb')
f.write(''.join(filecontent))
f.close()
f = open(responseFilename, 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
clientSocket.close()
requestedFile.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>This is problem 3</h1>
</body>
</html>
'컴퓨터 공학 > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 네트워크 계층 기본 개념 정리 (0) | 2021.05.30 |
---|---|
[Python3/컴퓨터 네트워크] 소켓 프로그래밍 : 파일 전송 프로그램 (0) | 2021.05.03 |
[컴퓨터 네트워크] Transport Layer 전송 계층 기본 개념 정리 (0) | 2021.05.02 |
[컴퓨터 네트워크] Application layer 애플리케이션 계층 기본 개념 정리 (0) | 2021.05.02 |
[컴퓨터 네트워크] 컴퓨터 네트워크 Introduction 정리 (0) | 2021.05.02 |