Hello Everyone
I am receiving an error in an application I am working on. The
application when its done will be a Dungeons and Dragons Network game. I
am having problems with the Networked Canvas basically for drawing the
dungeon maps
If I initialize two of the Tkinter Canvas widgets with in the same
window I can draw across the network, however if I open a second
instance of the Application and initialize the canvas, on windows I recv
a "Software has caused a connection abort error", on Linux I recv a
broken pipe message
I am wondering how to go about fixing this I have spent the last 4 days
trying to figure it
Any ideas would be appreciated
Cheers
###CODE###
#CLIENT
import random
import time
from Tkinter import *
import string
import sys
import Image
import ImageTk
import JpegImagePlugin
from threading import *
import socket
import spots
import time
import thread
Image.initializ ed = 1
HOST = '24.207.81.142'
PORT = 8080
PORT2 = 8888
s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
s.connect((HOST , PORT))
PORT2 = 8888
server = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
server.connect( (HOST, PORT2))
ZSP = spots.ZSP(serve r)
def main():
global hold
hold = []
global fill
fill = '#000000'
connect()
root = Tk()
root.title('Gra phics')
root.resizable( False, False)
upper = LabelFrame(root , text='Global Canvas')
lower = LabelFrame(root , text='Their Canvas')
global draw
draw = Canvas(upper, bg='#ffffff', width=400, height=300,
highlightthickn ess=0)
global look
#look = Canvas(lower, bg='#ffffff', width=400, height=300,
highlightthickn ess=0)
cursor = Button(upper, text='Cursor Color', command=change_ cursor)
canvas = Button(upper, text='Canvas Color', command=change_ canvas)
draw.bind('<Mot ion>', motion)
draw.bind('<But tonPress-1>', press)
draw.bind('<But tonRelease-1>', release)
draw.bind('<But ton-3>', delete)
upper.grid(padx =5, pady=5)
lower.grid(padx =5, pady=5)
draw.grid(row=0 , column=0, padx=5, pady=5, columnspan=2)
#look.grid(padx =5, pady=5)
cursor.grid(row =1, column=0, padx=5, pady=5, sticky=EW)
canvas.grid(row =1, column=1, padx=5, pady=5, sticky=EW)
root.mainloop()
def connect():
thread.start_ne w_thread(proces sor, ())
##def start_server():
## global ZSP
## server = socket.socket()
## server.bind(('' , PORT))
## server.listen(1 )
## ZSP = spots.ZSP(serve r.accept()[0])
def processor():
while True:
(func, args, kwargs) = ZSP.recv()
getattr(draw, func)(*args, **kwargs)
time.sleep(0.1)
def call(func, *args, **kwargs):
ZSP.send((func, args, kwargs))
############### ############### ############### ############### ############### #####
def change_cursor() :
global fill
color = tkColorChooser. askcolor(color= fill)[1]
if color is not None:
fill = color
def change_canvas() :
color = tkColorChooser. askcolor(color= draw['bg'])[1]
if color is not None:
draw['bg'] = color
draw.config(bg= color)
call('config', bg=color)
############### ############### ############### ############### ############### #####
def motion(event):
if hold:
hold.extend([event.x, event.y])
event.widget.cr eate_line(hold[-4:], fill=fill, tag='TEMP')
call('create_li ne', hold[-4:], fill=fill, tag='TEMP')
def press(event):
global hold
hold = [event.x, event.y]
def release(event):
global hold
if len(hold) 2:
event.widget.de lete('TEMP')
event.widget.cr eate_line(hold, fill=fill, smooth=True)
call('delete', 'TEMP')
call('create_li ne', hold, fill=fill, smooth=True)
hold = []
def delete(event):
event.widget.de lete(ALL)
call('delete', ALL)
############### ############### ############### ############### ############### #####
class App:
def __init__(self, master):
#initialize socket variables for theclient
self.thread1 = Thread(target=s elf.run)
self.thread1.st art()
self.frameH = frameH = Frame(master, background="#ff ffff")
self.labelH = Label(frameH, image=fri)
self.labelH.pac k(side=TOP)
frameH.pack()
self.framettext = Frame(master)
self.scrollbar = Scrollbar(self. framettext)
self.scrollbar. pack(side=RIGHT , fill=Y, expand=TRUE)
self.textbox = Text(self.frame ttext)
self.textbox.pa ck(fill=BOTH, expand=True)
self.textbox.co nfig(yscrollcom mand=self.scrol lbar.set)
self.scrollbar. config(command= self.textbox.yv iew)
self.framettext .pack(fill=BOTH , expand=True)
self.frame = Frame(master)
self.frame.pack (fill=X, expand=True)
self.send=Butto n(self.frame, text='Send Message',
command=self.se nd)
self.send.pack( side=LEFT)
self.draw=Butto n(self.frame, text='Dungeon Canvas',
command=self.op enCanvas)
self.draw.pack( side=LEFT)
self.d20=Button (self.frame, text='D20', command=self.d2 0roll)
self.d20.pack(s ide=LEFT)
self.sendtext=E ntry(self.frame )
self.sendtext.p ack(side=LEFT, fill=X, expand=True)
############### ############### ############### ############### ############### #####
def d20roll(self):
self.rand = random.randrang e(1, 20)
rs = str(self.rand)
self.d20text = "d20 Roll " + rs
s.send(self.d20 text)
self.textbox.in sert(END, self.d20text)
def openCanvas(self ):
main()
def send(self):
self.sendit = self.sendtext.g et()
if self.sendit == "":
pass
else:
s.send(self.sen dit)
self.textbox.in sert(END, self.sendit + "\n")
self.sendtext.d elete(0, END)
def run(self):
while 1:
data=s.recv(102 4)
app.textbox.ins ert(END, str(data) + "\n")
time.sleep(0.1)
############### ############### ###
root = Tk()
root.wm_resizab le(0, 0)
root.wm_iconbit map("shinobi.ic o")
frmimg = Image.open("ban ner.jpg")
fri = ImageTk.PhotoIm age(frmimg)
classtitle="Tec h Shinobi Chat 1.0"
root.option_rea dfile("optionDB ")
root.title(clas stitle)
root.geometry(' %dx%d+%d+%d' % (500,380,0,0))
app = App(root)
root.mainloop()
s.close()
###END CODE###
That is the client now here is the server
###CODE###
#!/usr/bin/env python
#SERVER
import socket, traceback, os, sys
from threading import *
import spots
host = '' # Bind to all interfaces
port = 8888
def handlechild():
while 1:
data = ZSP.recv()
if not len(data):
break
ZSP.send((data) )
# Set up the socket.
s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
s.setsockopt(so cket.SOL_SOCKET , socket.SO_REUSE ADDR, 1)
s.bind((host, port))
s.listen(1)
while 1:
try:
ZSP = spots.ZSP(s.acc ept()[0])
except KeyboardInterru pt:
raise
except:
traceback.print _exc()
continue
t = Thread(target=h andlechild)
t.setDaemon(1)
t.start()
heres is a link to the spots module I am using
also the original drawing application I am using
Cheers
I appreciate any help
ty
Andrew Evans
I am receiving an error in an application I am working on. The
application when its done will be a Dungeons and Dragons Network game. I
am having problems with the Networked Canvas basically for drawing the
dungeon maps
If I initialize two of the Tkinter Canvas widgets with in the same
window I can draw across the network, however if I open a second
instance of the Application and initialize the canvas, on windows I recv
a "Software has caused a connection abort error", on Linux I recv a
broken pipe message
I am wondering how to go about fixing this I have spent the last 4 days
trying to figure it
Any ideas would be appreciated
Cheers
###CODE###
#CLIENT
import random
import time
from Tkinter import *
import string
import sys
import Image
import ImageTk
import JpegImagePlugin
from threading import *
import socket
import spots
import time
import thread
Image.initializ ed = 1
HOST = '24.207.81.142'
PORT = 8080
PORT2 = 8888
s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
s.connect((HOST , PORT))
PORT2 = 8888
server = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
server.connect( (HOST, PORT2))
ZSP = spots.ZSP(serve r)
def main():
global hold
hold = []
global fill
fill = '#000000'
connect()
root = Tk()
root.title('Gra phics')
root.resizable( False, False)
upper = LabelFrame(root , text='Global Canvas')
lower = LabelFrame(root , text='Their Canvas')
global draw
draw = Canvas(upper, bg='#ffffff', width=400, height=300,
highlightthickn ess=0)
global look
#look = Canvas(lower, bg='#ffffff', width=400, height=300,
highlightthickn ess=0)
cursor = Button(upper, text='Cursor Color', command=change_ cursor)
canvas = Button(upper, text='Canvas Color', command=change_ canvas)
draw.bind('<Mot ion>', motion)
draw.bind('<But tonPress-1>', press)
draw.bind('<But tonRelease-1>', release)
draw.bind('<But ton-3>', delete)
upper.grid(padx =5, pady=5)
lower.grid(padx =5, pady=5)
draw.grid(row=0 , column=0, padx=5, pady=5, columnspan=2)
#look.grid(padx =5, pady=5)
cursor.grid(row =1, column=0, padx=5, pady=5, sticky=EW)
canvas.grid(row =1, column=1, padx=5, pady=5, sticky=EW)
root.mainloop()
def connect():
thread.start_ne w_thread(proces sor, ())
##def start_server():
## global ZSP
## server = socket.socket()
## server.bind(('' , PORT))
## server.listen(1 )
## ZSP = spots.ZSP(serve r.accept()[0])
def processor():
while True:
(func, args, kwargs) = ZSP.recv()
getattr(draw, func)(*args, **kwargs)
time.sleep(0.1)
def call(func, *args, **kwargs):
ZSP.send((func, args, kwargs))
############### ############### ############### ############### ############### #####
def change_cursor() :
global fill
color = tkColorChooser. askcolor(color= fill)[1]
if color is not None:
fill = color
def change_canvas() :
color = tkColorChooser. askcolor(color= draw['bg'])[1]
if color is not None:
draw['bg'] = color
draw.config(bg= color)
call('config', bg=color)
############### ############### ############### ############### ############### #####
def motion(event):
if hold:
hold.extend([event.x, event.y])
event.widget.cr eate_line(hold[-4:], fill=fill, tag='TEMP')
call('create_li ne', hold[-4:], fill=fill, tag='TEMP')
def press(event):
global hold
hold = [event.x, event.y]
def release(event):
global hold
if len(hold) 2:
event.widget.de lete('TEMP')
event.widget.cr eate_line(hold, fill=fill, smooth=True)
call('delete', 'TEMP')
call('create_li ne', hold, fill=fill, smooth=True)
hold = []
def delete(event):
event.widget.de lete(ALL)
call('delete', ALL)
############### ############### ############### ############### ############### #####
class App:
def __init__(self, master):
#initialize socket variables for theclient
self.thread1 = Thread(target=s elf.run)
self.thread1.st art()
self.frameH = frameH = Frame(master, background="#ff ffff")
self.labelH = Label(frameH, image=fri)
self.labelH.pac k(side=TOP)
frameH.pack()
self.framettext = Frame(master)
self.scrollbar = Scrollbar(self. framettext)
self.scrollbar. pack(side=RIGHT , fill=Y, expand=TRUE)
self.textbox = Text(self.frame ttext)
self.textbox.pa ck(fill=BOTH, expand=True)
self.textbox.co nfig(yscrollcom mand=self.scrol lbar.set)
self.scrollbar. config(command= self.textbox.yv iew)
self.framettext .pack(fill=BOTH , expand=True)
self.frame = Frame(master)
self.frame.pack (fill=X, expand=True)
self.send=Butto n(self.frame, text='Send Message',
command=self.se nd)
self.send.pack( side=LEFT)
self.draw=Butto n(self.frame, text='Dungeon Canvas',
command=self.op enCanvas)
self.draw.pack( side=LEFT)
self.d20=Button (self.frame, text='D20', command=self.d2 0roll)
self.d20.pack(s ide=LEFT)
self.sendtext=E ntry(self.frame )
self.sendtext.p ack(side=LEFT, fill=X, expand=True)
############### ############### ############### ############### ############### #####
def d20roll(self):
self.rand = random.randrang e(1, 20)
rs = str(self.rand)
self.d20text = "d20 Roll " + rs
s.send(self.d20 text)
self.textbox.in sert(END, self.d20text)
def openCanvas(self ):
main()
def send(self):
self.sendit = self.sendtext.g et()
if self.sendit == "":
pass
else:
s.send(self.sen dit)
self.textbox.in sert(END, self.sendit + "\n")
self.sendtext.d elete(0, END)
def run(self):
while 1:
data=s.recv(102 4)
app.textbox.ins ert(END, str(data) + "\n")
time.sleep(0.1)
############### ############### ###
root = Tk()
root.wm_resizab le(0, 0)
root.wm_iconbit map("shinobi.ic o")
frmimg = Image.open("ban ner.jpg")
fri = ImageTk.PhotoIm age(frmimg)
classtitle="Tec h Shinobi Chat 1.0"
root.option_rea dfile("optionDB ")
root.title(clas stitle)
root.geometry(' %dx%d+%d+%d' % (500,380,0,0))
app = App(root)
root.mainloop()
s.close()
###END CODE###
That is the client now here is the server
###CODE###
#!/usr/bin/env python
#SERVER
import socket, traceback, os, sys
from threading import *
import spots
host = '' # Bind to all interfaces
port = 8888
def handlechild():
while 1:
data = ZSP.recv()
if not len(data):
break
ZSP.send((data) )
# Set up the socket.
s = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
s.setsockopt(so cket.SOL_SOCKET , socket.SO_REUSE ADDR, 1)
s.bind((host, port))
s.listen(1)
while 1:
try:
ZSP = spots.ZSP(s.acc ept()[0])
except KeyboardInterru pt:
raise
except:
traceback.print _exc()
continue
t = Thread(target=h andlechild)
t.setDaemon(1)
t.start()
heres is a link to the spots module I am using
also the original drawing application I am using
Cheers
I appreciate any help
ty
Andrew Evans
Comment