局域网聊天---当前有图形和基本的架构 分享有时间的可以补充,---当前有,#coding:utf-
#coding:utf-8 import socketimport threadingimport datetimeimport configimport talkWindowimport constantclass Mythread(threading.Thread): def __init__(self, func, args, name=''): #线程类,供收发消息用 #func:线程要执行的函数功能 #args:func函数传递的参数 #name:线程名字 #isdaemon:是否设置成守护线程,默认为非 def __init__(self, func, args, name='', isdaemon=False): threading.Thread.__init__(self) self.func = func self.args = args self.name = name self.daemon = isdaemon def run(self): #重写threading的run函数 #用了apply函数 apply(self.func, self.args, self.name, self.daemon)def sendmessage(tcpobject, windobject): #发送消息函数 if windobject.send_button_text: #获得输入的消息内容 try: tcpobject.send('%s' % (windobject.send_button_text)) #发送数据 except Exception, err: print "%s, again sending" % (err) tcpobject.send('%s' % (windobject.send_button_text)) #发送数据 windobject.send_button_text = None #将数据清空def recvmessage(tcpobject, windobject): #接收消息函数 data = None try: data = tcpobject.recv(tcpobject.buffsize) except Exception, err: print "%s, again reveing" % (err) data = tcpobject.recv(tcpobject.buffsize) #将收到的数据显示在显示聊天框中 if data: windobject.talk_window.insert(1.0, "%s\\n" % (data))def create_child_window(): #创建两人聊天窗口 child_talk = ClientSocket(child=True)class ClientSocket(): def __init__(self, config=config.init_socket('./sockini.ini', 'socketini'), child=False): #客户端通讯类(创建聊天窗口;实现线程,收发信息用) #config:初始化sock连接的参数,init_socket第一参数是配置文件,第二参数是配置文件里面的标志参数 #config 返回(HOST, PORT, BUFFERSIZE, ADDR) addr是(HOST,PORT) 元组 #child是否是两人两人聊天窗口,是的话,点击上线列表将不在创建窗口 self.host = config[0] self.port = config[1] self.buffsize = config[2] self.addr = config[3] self.ischild = child #套接字对象 self.tcp_client = None #连接服务器 try: print u"客户端开始连接服务器..." self.connet() except Exception, err: print "%s, again conneting\\n" % (err) self.connet() self.window = talkWindow.talkWindow() #创建窗口 self.window.cur_select_ip = None #当前是否有点击想单聊 #创建线程开始工作 self.create_threading() while True: try : self.go_working() except Exception, err: print "%s, again working" % (err) self.go_working() #退出时关闭套接字 self.tcp_client.close() def connet(self): #连接服务器 self.tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket self.tcp_client.connect(self.addr) #连接服务器 def create_threading(self): #创建收发线程 self.recv = Mythread(recvmessage, (self.tcp_client, self.window), "recving") self.send = Mythread(sendmessage, (self.tcp_client, self.window), "sending") def go_working(self): #开始工作:传输和收发数据,主进程监听是否要单聊 self.recv.start() self.send.start() #监听是否双击单人聊天 if not self.ischild and self.window.cur_select_ip: #群聊单间ip才有丹聊 create_child_window()if __name__ == "__main__": sock = ClientSocket()#该片段来自于http://byrx.net
评论关闭