局域网聊天---当前有图形和基本的架构 分享有时间的可以补充,---当前有,#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

评论关闭