0

Python で単純な「チャット」クライアントを作成しようとしています。私は基本とすべてを持っていますが、スレッドをまったく機能させることができません。これはまだ進行中の作業であるため、まだすべてのコードが完成しているわけではありませんが、全体として何か提案があれば大歓迎です。

from Tkinter import *
import time
import socket
import thread
import threading

HOST = 'localhost'
PORT = 5454
fromserver = ''
data = ''



#Declares socket information
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

s.bind((HOST,PORT))


#Loop for receiving
def receivingloop():
    global fromserver
    while 1:
        fromserver = s.recv(30)
        time.sleep(.5)


class ChatClient:
    def __init__(self, master):

        #Use Global fromserver
        global fromserver
        global data
        #Create both frames        
        top_frame = Frame(master)
        bot_frame = Frame(master)
        #Create and pack the Buttons
        self.send_but = Button(bot_frame, \
                               text='Send',\
                               command=self.sending)
        self.quit_but = Button(bot_frame, \
                               text='Quit', \
                               command=client_window.destroy)        
        self.send_but.pack(side=LEFT)
        self.quit_but.pack(side=LEFT)




       #Create and pack label 
        self.received_lab = Label(top_frame,\
                                  text=(fromserver))        

        self.received_lab.pack()

        self.sent_lab = Label(top_frame,\
                              text='Message Sent: ' +data)

        self.sent_lab.pack()

        self.sending_entry = Entry(top_frame, \
                                   width=10)


        self.sending_entry.pack()

        #Pack Frames
        top_frame.pack()
        bot_frame.pack()


    #Function to send stuff          
    def sending(self):
        global data
        s.sendto(data,(HOST,PORT))
        data = str(self.sending_entry.get())
        print data


#Start the thread    
l1 = threading.Thread(target=receivingloop)
l1.start()


client_window = Tk()
chat_client = ChatClient(client_window)        
client_window.mainloop()
4

2 に答える 2

1

私が間違っていなければ、receiverloop メソッドは self 要素を受け取りますが、self 引数はクラスによってのみ必要であり、このメソッドはクラスにありません。

これを試して:

#Loop for receiving
def receivingloop():
    global fromserver
    while 1:
        fromserver = s.recv(30)
        time.sleep(.5)
于 2013-03-29T21:53:04.550 に答える
0

関数は「self」という変数で定義されています。以前はこの関数をクラスに持っていたようですが、後でクラスから抽出することにしました。

とにかく、問題を解決するには、次のようにする必要があります。

デフ受信ループ():

関数の引数から 'self' の部分が削除されていることに注意してください。

global dataまた、送信機能に追加することもできます。

于 2013-03-29T23:44:03.980 に答える