본문 바로가기
프로그래밍/python

모스부호로 통신 네트워크 프로그래밍

by 신일석 2020. 8. 26.

클라이언트 서버 1:1 네트워크 프로그래밍입니다.

서버를 실행하면 memo.txt를 읽어 모스 부호로 변환합니다.
클라이언트가 접속하면 변환한 모스 부호를 보내주고
클라이언트는 이를 받아 다시 문자로 변환하여 rcv_memo.txt로 저장하는 코드입니다.

server.py

"""
서버와 클라이언트 연결
"""
from socket import *
import module

myip = '127.0.0.1' # 서버 IP 주소
myport = 62580 # 클라이언트가 최초 연결할 포트
with open('memo.txt', 'r', encoding='utf-8') as f:
    message = f.readline() # KOREA WELCOME
    mos_msg = module.alp2mos(message) # mos...
# message = "Welcome"
address = (myip, myport) # 주소는 (IP, Port)쌍의 튜플 형태로
serversock = socket(AF_INET, SOCK_STREAM) # 소켓 생성
serversock.bind(address) # 소켓에 주소 전달
serversock.listen() # 외부에서 연결 요청 사능한 상태
clientsock, addr = serversock.accept()
clientsock.send(bytes(mos_msg, encoding='utf-8'))

client.py

"""
ex0824_1서버에 접속할 클라이언트
"""
from socket import *
import module
serverip = '127.0.0.1'
serverport = 62580
serveraddress = (serverip, serverport)
mysock = socket(AF_INET, SOCK_STREAM)
mysock.connect(serveraddress)
data = mysock.recv(1024)
print(data.decode("utf-8"))
with open('rcv_memo.txt', 'w') as f:
    new_data = data.decode("utf-8")
    f.write("{}\n".format(new_data))
    f.write("\t{}".format(module.mos2alp(new_data)))

module.py

"""
모스부호를 문장으로 변환합니다.
ABCDE -->  AE BB CD
.-
-...
-.-.
-..
.
"""
mos = ('.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..',
       '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.',
       '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..')

def alp2mos(param):
    result = ""
    # ord('A') == 65, ord('Z') == 90, ord(' ') == 32
    for i in param:
        tmp = ord(i)
        if tmp > 64 and tmp < 91:
            result += mos[tmp-65] + ' '
        elif tmp == 32:
            result += ' '
    print(param, result)
    return result

def mos2alp(param):
    result = ""
    # ord('A') == 65, ord('Z') == 90, ord(' ') == 32
    mos_list = param.split(' ')
    for m in mos_list:
        length = len(mos)
        if m == '':
            result += ' '
            continue
        for i in range(length):
            if m == mos[i]:
                result += chr(i + 65)
                break
    print(param, result)
    return result

if __name__ == '__main__':
    mymos = alp2mos('KOREA BLUE')
    mos2alp(mymos)

'프로그래밍 > python' 카테고리의 다른 글

_와 __의 차이  (0) 2020.08.27
빅텍스트 출력하기  (0) 2020.08.21
정규식을 이용해 html 태그 제거하기  (0) 2020.08.21