server.py
from socket import *
import signal
import sys
def signal_handler(signal, frame):
print("signal handler is called.")
sys.exit(0)
def main():
signal.signal(signal.SIGINT, signal_handler)
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print("The Server is ready to receive.")
while True:
message, clientAddress = serverSocket.recvfrom(2048)
msg = message.decode().split(",")
print(msg)
operation = msg[1]
print(operation)
if '.' in msg[0]:
num1 = float(msg[0])
else:
num1 = int(msg[0])
if '.' in msg[0]:
num2 = float(msg[2])
else:
num2 = int(msg[2])
if operation == '+':
result = num1+num2
elif operation == '-':
result = num1-num2
elif operation == 'x':
result = num1*num2
elif operation == '/':
result = num1/num2
else:
print("operation error")
serverSocket.sendto(str(result).encode(), clientAddress)
if __name__=="__main__":
main()
client.py
from socket import *
import tkinter
from tkinter import StringVar, ttk
def btn_pressed(result_window, value):
global operator, temp, result
if value == "AC":
#* initialize
operator = ''
temp = 0
result = ''
result_window.delete(0,'end')
print("All Clear pressed")
else:
if result != '':
# operator = ''
# temp = 0
result = ''
result_window.delete(0,'end')
result_window.insert("end", value)
print(value+" is pressed.")
def operator_pressed(result_window, value):
global operator
global temp
if (result_window.get() != ''):
operator = value
res_value = result_window.get()
if '.' in res_value:
temp = float(res_value)
else:
temp = int(res_value)
result_window.delete(0,'end') #* 지우고 나서 다음 입력을 받음
print("operator func : ",temp,operator)
def equal_button_pressed(result_window, value,serverName, serverPort,clientSocket):
global operator,temp,result
print("for equal : ", temp,operator,"?",value)
if operator != '' and result_window.get() != '':
res_value = result_window.get()
if '.' in res_value:
number = float(res_value)
else:
number = int(res_value)
msg = ""
msg += str(temp)
msg += ","
msg += str(operator)
msg += ","
msg += str(number)
clientSocket.sendto(msg.encode(), (serverName, serverPort))
'''
if operator == '+':
result = temp + number
elif operator == '-':
result = temp - number
elif operator == 'x':
result = temp * number
elif operator == '/':
result = temp / number
else:
print("operator error!")
'''
resultMessage, serverAddress = clientSocket.recvfrom(2048)
result = resultMessage.decode()
print("server : ",result)
result_window.delete(0,'end')
result_window.insert(0,result)
print(temp,operator,number,"=",result)
#* initialize
operator = ''
temp = 0
def main():
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
global operator,temp,result
operator = ''
temp = 0
result = ''
window = tkinter.Tk()
window.title("Calculator")
window.geometry("400x200")
input_value = StringVar(window, value='') # 입력 창
result_window = ttk.Entry(window,textvariable=input_value ,width=40)
result_window.grid(row=0, columnspan=4)
#* button 7~9
keypad = ttk.Button(window, text="7",command=lambda:btn_pressed(result_window,"7"))
keypad.grid(row=1, column=0)
keypad = ttk.Button(window, text="8",command=lambda:btn_pressed(result_window,"8"))
keypad.grid(row=1, column=1)
keypad = ttk.Button(window, text="9",command=lambda:btn_pressed(result_window,"9"))
keypad.grid(row=1, column=2)
#* mul button
keypad = ttk.Button(window, text="x",command=lambda:operator_pressed(result_window,"x"))
keypad.grid(row=1, column=3)
#* button 4~6
keypad = ttk.Button(window, text="4",command=lambda:btn_pressed(result_window,"4"))
keypad.grid(row=2, column=0)
keypad = ttk.Button(window, text="5",command=lambda:btn_pressed(result_window,"5"))
keypad.grid(row=2, column=1)
keypad = ttk.Button(window, text="6",command=lambda:btn_pressed(result_window,"6"))
keypad.grid(row=2, column=2)
#* minus button
keypad = ttk.Button(window, text="-",command=lambda:operator_pressed(result_window,"-"))
keypad.grid(row=2, column=3)
#* button 1~3
keypad = ttk.Button(window, text="1",command=lambda:btn_pressed(result_window,"1"))
keypad.grid(row=3, column=0)
keypad = ttk.Button(window, text="2",command=lambda:btn_pressed(result_window,"2"))
keypad.grid(row=3, column=1)
keypad = ttk.Button(window, text="3",command=lambda:btn_pressed(result_window,"3"))
keypad.grid(row=3, column=2)
#* plus button
keypad = ttk.Button(window, text="+",command=lambda:operator_pressed(result_window,"+"))
keypad.grid(row=3, column=3)
#* button All clear, 0, divide
keypad = ttk.Button(window, text="AC",command=lambda:btn_pressed(result_window,"AC"))
keypad.grid(row=4, column=0)
keypad = ttk.Button(window, text="0",command=lambda:btn_pressed(result_window,"0"))
keypad.grid(row=4, column=1)
keypad = ttk.Button(window, text="/",command=lambda:operator_pressed(result_window,"/"))
keypad.grid(row=4, column=2)
#* equal button
keypad = ttk.Button(window, text="=",command=lambda:equal_button_pressed(result_window,"=",serverName, serverPort,clientSocket))
keypad.grid(row=4, column=3)
window.mainloop()
if __name__=="__main__":
main()
'Code' 카테고리의 다른 글
roberts sobel prewit operator (0) | 2022.05.10 |
---|---|
python TCP calculator (0) | 2022.05.10 |
raw to bmp (0) | 2022.03.29 |
백준 4354 (0) | 2022.02.07 |
백준 1786 (0) | 2022.02.07 |