본문 바로가기

컴퓨터 공학/컴퓨터 네트워크

[Python3/컴퓨터 네트워크] 소켓 프로그래밍 : 파일 전송 프로그램

성균관대학교 소프트웨어학과 추현승 교수님의 2021년도 1학기 네트워크 개론 수업 과제 입니다. 

서버가 가지고 있는 파일을 클라이언트 측으로 전송하는 프로그램입니다. 


 

전송하고자 하는 파일을 서버 디렉터리에 위치시키고 서버 프로그램에 파일을 오픈하는 코드에서 파일 이름을 설정해주면 됩니다. 

서버를 실행시킨 후 클라이언트를 실행시켜 파일 전송 요청을 보내면 클라이언트 디렉터리에 서버가 가지고 있는 파일이 전송되어 생성되는 것을 확인할 수 있습니다. 

파일 구조

fileTransfer

      |-------- server

                         |-------sent_data.txt

                         |-------server.py

      |-------- client

                         |-------client.py

 

server.py

#import socket for socket programming
from socket import *
#import os to get path of current directory 
import os

#prepare server socekt - TCP 
serverSocket = socket(AF_INET, SOCK_STREAM)
serverPort = 12345
serverSocket.bind(("", serverPort))
serverSocket.listen(1)
print('Ready to serve...')
#create connection socket 
connectionSocket, addr = serverSocket.accept()
#get path of current directory
#execute server.py program on problem8 directory -> current_dir = HW2_2017310301/problem8
current_dir = os.getcwd()
#open sent_data.txt file stored in HW2_2017310301/problem8/server and read the file as binary 
f = open(current_dir + '/server/sent_data.txt', 'rb')
try:
    #save the data read from the sent_data.txt file
    data = f.read(1024)
    #send data through connectino socket 
    connectionSocket.send(data.encode())
#handle exception 
except Exception:
    print(Exception)
#close socket 
serverSocket.close()

client.py

#import socket for socket programming
from socket import *
#import os to get path of current directory 
import os
#import sys 
import sys

#prepare client socket - TCP 
serverName = '127.0.0.1'
serverPort = 12345
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
#get path of current directory
#execute server.py program on problem8 directory -> current_dir = HW2_2017310301/problem8
current_dir = os.getcwd()
#create sent_data.txt file stored in HW2_2017310301/problem8/client and open to write in binary 
f = open(current_dir + "/client/Received_data.txt" , "wb")
try:
    #store data recieved from server througth client socket
    data = clientSocket.recv(1024)
    #write recieved data in new text file 
    f.write(data)
    print(data)
#handle exception
except Exception:
    print(Exception)
#close socket 
clientSocket.close()