import socket
from _thread import *
from tkinter import *
def threaded(client_socket, addr):
global chat_log
global namebool
while namebool == True:
data = client_socket.recv(1024)
chat_log['state'] = 'normal'
name = str(data.decode())
namebool = False
chat_log['state'] = 'normal'
chat_log.insert("end", '[System] ' + name +' 님이 접속하였습니다.'+'\n')
chat_log['state'] = 'disabled'
for c in c_list:
c.sendall(('[System] ' + '☈' + name + ' 님이 접속하였습니다.').encode())
while 1:
try:
data = client_socket.recv(1024)
chat_log['state'] = 'normal'
chat_log.insert("end", name + ':' + '\n' + str(data.decode()) + '\n' + '\n')
chat_log['state'] = 'disabled'
for c in c_list:
c.sendall((name + '☈' + data.decode()).encode())
except ConnectionResetError as e:
c_list.remove(client_socket)
for c in c_list:
c.sendall(('[System] ' + name + ' 님이 나갔습니다.').encode())
chat_log['state'] = 'normal'
chat_log.insert("end", 'Disconnected by ' + addr[0] + ':' + str(addr[1]) + '\n')
chat_log['state'] = 'disabled'
break
client_socket.close()
def server_open():
HOST = ip_entry.get()
PORT = int(port_entry.get())
start_new_thread(make_server, (HOST, PORT))
open_button['state'] = 'disabled'
ip_entry['state'] = 'readonly'
port_entry['state'] = 'readonly'
def server_close():
exit()
def make_server(HOST, PORT):
global server_socket
global namebool
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen()
chat_log['state'] = 'normal'
chat_log.insert("end", 'Server Start\n')
chat_log['state'] = 'disabled'
while 1:
client_socket, addr = server_socket.accept()
namebool = True
c_list.append(client_socket)
start_new_thread(threaded, (c_list[-1], addr))
c_list = []
close = False
server_socket = None
namebool = True
s_root = Tk()
s_root.geometry('500x500')
s_root.title('Server')
s_root.resizable(False, False)
''' Top Menu '''
Label(s_root, text='Server IP : ').place(x=20, y=20)
Label(s_root, text='Port : ').place(x=250, y=20)
ip_entry = Entry(s_root, width=14)
ip_entry.place(x=83, y=21)
ip_entry.insert(0, '127.0.0.1')
port_entry = Entry(s_root, width=5)
port_entry.place(x=290, y=21)
port_entry.insert(0, '9999')
open_button = Button(s_root, text='Server Open', command=server_open)
open_button.place(x=380, y=18)
''' Middle Menu '''
chat_log = Text(s_root, width=65, height=29, state='disabled', spacing2=2)
chat_log.place(x=20, y=60)
''' Bottom Menu '''
close_button = Button(s_root, text='Server Close', command=server_close)
close_button.place(x=200, y=460)
s_root.mainloop()
top of page

실제 작동 상태를 확인하려면 라이브 사이트로 이동하세요.
server.py
server.py
댓글 0개
좋아요
댓글(0)
더 이상 게시물에 대한 댓글 기능이 지원되지 않습니다. 자세한 사항은 사이트 소유자에게 문의하세요.
bottom of page


