wxPython を使用して単純な IRC サーバーとクライアント GUI を作成しています。私のアプリケーションでは、2 つのスレッドを実行していました。1 つは GUI 用で、もう 1 つは情報の送受信に必要なソケット接続用です。これまでのところ、クライアント アプリケーションを使用してサーバーに正常に接続していると思いますが、メッセージが処理されていません。別の TCP リスナー アプリケーションでクライアントを使用してみましたが、メッセージを正常に送信できました。問題は、GUI の設定方法にあると思います。サーバー側アプリケーションのコードは次のとおりです(スペースがぎこちなくて申し訳ありません)
問題は bootUp() 関数内にあると感じています..
#!/usr/bin/python
import wx
import socket
import threading
from threading import Thread
ip = ""
port = 0
backlog = 5
chatText = ""
class relayServerGUI(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Enter IP address", size = (600, 600))
orciPanel = wx.Panel(self)
relayChat = wx.TextCtrl(orciPanel, 0, chatText, (50, 50), (500, 500),style = wx.TE_MULTILINE)
portInput = wx.TextEntryDialog(None, "Enter Port: ", "")
if portInput.ShowModal() == wx.ID_OK:
global port
port = int(portInput.GetValue())
thread2()
def relayInterpretor():
socketRelay = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketRelay.bind((ip, port))
socketRelay.listen(backlog)
client, address = socketRelay.accept()
while 1:
relayData = client.recv(1024)
global chatText
chatText += (relayData)
client.send(relayData)
def bootUP():
if __name__ == "__main__":
relayApplication = wx.PySimpleApp()
relayFrame = relayServerGUI(parent = None, id = -1)
relayFrame.Show()
relayApplication.MainLoop()
while 1:
relayChat.Clear()
relayChat.AppendText(chatText)
Thread(target = bootUP).start()
def thread2():
Thread(target = relayInterpretor).start()
EDIT:relayChatは、理想的にはメッセージが表示される場所です。グローバル文字列変数である chatText をコピーするように設定したので、クロススレッドについて詳しく調べる必要はありません。