코딩/python - 코드

[python] file 소켓을 통한 txt파일 전송 서버->클라이언트

투비치 2020. 11. 10. 13:50
728x90

소켓통신을 하게되면

서버측은 소켓생성 -> bind -> listen -> accept -> 소켓닫기 형식으로 이루어집니다.

클라이언트 측은 소켓생성 -> 소켓연결(서버측으로) -> 소켓닫기 형식으로 이루어집니다.

간단히 코드는 에코 서버로 진행하였습니다. 해당코드는 서버와 클라이언트가 같은 네트워크상에 있어야 작동이 가능합니다.

 

서버

#서버
import socket
import sys
import os

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
PORT = 9891
s.bind(('127.0.0.1', PORT))

s.listen(10)
conn,addr = s.accept()

f = open("out.txt", "rb")
data = f.read(1024)
while data:
    conn.send(data)
    data = f.read(1024)
    
f.close()
conn.close()

서버의 경우 파일을 읽기모드로 해당파일의 정보를 읽어오고 파일의 정보를 읽은 데이타를 클라이언트 측으로 보내주게 된다.

(while에서 데이타의 끝이 나타나면 while문은 종료된다.)

클라이언트

import socket
import sys
import os

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
PORT = 9888
ServerIp = '127.0.0.1'
s.connect((ServerIp, PORT))

data = s.recv(1024)
f = open("output.txt", "wb")

while data:
    f.write(data)
    data = s2.recv(1024)
f.close()
            
s.close()

클라이언트의 경우 쓰기모드로 서버측에서 전송된 파일의 정보를 하나의 변수에 recv를 이용해서 저장하고, while을 이용해서 해당 파일에 데이터를 쓰게된다.

 

간단히 에코서버나 같은 네트워크에서 작은 파일을 전송할 때 이용할 수 있을 것 같다.

 

728x90