ここで私のコードで何が間違っているのか分かりません。私はpycharmデバッガを使用して、サーバコードに何か問題があることを知りました。コマンドはclients_name.append(name)
です。Pythonソケット - ネットワーク
私のサーバーコード:
Server.py
import socket
import time
import numpy as np
import array
host = '127.0.0.1'
port = 5000
clients_name = ['NONE']
clients_addr = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Creating Socket OBJECT
s.bind((host, port))
s.setblocking(0)
quitting = False
print "Server Started"
while not quitting:
try:
data, addr = s.recvfrom(1024)
print data
for client in clients_addr:
print "hello"
s.sendto(clients_name, client)
if int(data[0]) == 1:
name = str(data[1])
print name, type(name)
if name not in clients_name:
clients_name.append(name)
print clients_name
if addr not in clients_addr:
clients_addr.append(addr)
print data[1]
print time.ctime(time.time()) + str(addr) + ": :" + str(data[1])
elif int(data[0]) ==0:
name = str(data[1])
clients_name.remove(name)
clients_addr.remove(addr)
except:
pass
s.close()
私のクライアントコード:
Client.py
import socket, threading, time, wx
from wx.lib.pubsub import setupkwargs
from wx.lib.pubsub import pub
from Communication import ReceiveData, SendData
import numpy as np
class windowClass(wx.Frame):
def __init__(self, parent, title):
global appSize_x
global appSize_y
appSize_x = 1100
appSize_y = 800
super(windowClass, self).__init__(parent, title = title, style = wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CLOSE_BOX |wx.CAPTION, size = (appSize_x, appSize_y))
self.basicGUI()
self.Centre()
self.Show()
def basicGUI(self):
# Font for all the text in the panel
font = wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD)
font2 = wx.Font(36, wx.MODERN, wx.ITALIC, wx.LIGHT)
# Main Panel
panel = wx.Panel(self)
panel.SetBackgroundColour('white')
self.title = wx.StaticText(panel, -1, "Work Transfer Application", pos=(150, 20))
self.title.SetFont(font2)
self.title.SetForegroundColour("RED")
self.name_text_ctrl = wx.TextCtrl(panel, -1, size=(150, 40), pos=(100, 200))
self.name_text_ctrl.SetFont(font)
self.refresh = wx.Button(panel, -1, 'REFRESH', size = (225,30), pos = (100, 300))
self.refresh.SetFont(font)
self.refresh.SetBackgroundColour('YELLOW')
self.refresh.Bind(wx.EVT_BUTTON, self.OnRefresh)
self.free_button = wx.Button(panel, -1, 'I AM FREE', size = (225,30), pos = (100, 400))
self.free_button.SetFont(font)
self.free_button.SetBackgroundColour('GREEN')
self.free_button.Bind(wx.EVT_BUTTON, self.OnFree)
self.got_work_button = wx.Button(panel, -1, ' GOT WORK', size = (225, 30), pos = (100, 600))
self.got_work_button.SetFont(font)
self.got_work_button.SetBackgroundColour('RED')
self.got_work_button.Bind(wx.EVT_BUTTON, self.OnGotWork)
self.got_work_button.Disable()
self.listbox = wx.ListBox(panel, -1, size=(300, 250), pos=(500, 200))
self.listbox.SetFont(font)
def OnRefresh(self, event):
self.host = '127.0.0.1'
self.port = 0
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.s.bind((self.host, self.port))
self.s.setblocking(0)
self.rT = threading.Thread(target=ReceiveData, name = "Receive Thread", args=(self.s,))
self.rT.daemon = True
self.rT.start()
pub.subscribe(self.ReadEvent, "READ EVENT")
def ReadEvent(self,arg1):
self.people_list = arg1 # This goes to list box
list_len = len(self.people_list)
for i in range(list_len):
self.listbox.Append(self.people_list[i])
def OnFree(self, event):
self.server = ('127.0.0.1', 5000) # This you UPDATE ONCE YOUR IP IS FIXED
self.flag = np.array([ '1', str(self.name_text_ctrl.GetValue())])
self.rS1 = threading.Thread(target = SendData, name = "Send Thread", args = (self.s,self.server, self.flag))
self.rS1.start()
self.got_work_button.Enable()
self.rS1.join()
print "Hello"
def OnGotWork(self, event):
self.flag = np.array([ '0', str(self.name_text_ctrl.GetValue())])
self.rS2 = threading.Thread(target=SendData, name="Send Thread", args=(self.s, self.server, self.flag))
self.rS2.start()
self.rS2.join()
self.s.close()
self.Close(True)
def main():
app = wx.App()
windowClass(None, title = 'Wagner SprayTech V2.0')
app.MainLoop()
if __name__ == '__main__': # if we're running file directly and not importing it
main() # run the main function
GUIのグラフィックを気にいけないしてください、I主に機能するアプリケーションを探しています。
私の考えは、クライアントコードを持っていることです。リフレッシュをクリックすると、サーバーからすべてclients_name
が得られます。 Freeをクリックすると、テキストボックスに入力した名前がサーバーに送信されます。
import threading, wx
import socket, time
from wx.lib.pubsub import setupkwargs
from wx.lib.pubsub import pub
import numpy as np
shutdown = False
lock = threading.Lock()
def ReceiveData(sock):
while not shutdown:
try:
lock.acquire()
#while True:
data, addr = sock.recvfrom(1024)
wx.CallAfter(pub.sendMessage, "READ EVENT", arg1 = data)
print str(data) + "hehehe" # Thisd data will be posted on a list box.
except:
pass
finally:
lock.release()
time.sleep(1)
def SendData(s, serv, data_send):
lock.acquire()
s.sendto(data_send, serv)
lock.release()
time.sleep(0.2)
私は次のように動作するコードたい:
- を実行し、サーバとクライアント(GUIを開きます)
- ユーザーが最新の情報に更新をヒットを - それは、サーバーからデータを取得する - です
clients_name
。これはリストボックスに表示され、GUI上に表示されます - 次に、ユーザーがテキストボックスに名前を入力し、「私は自由です」ボタンを押します。これは、textBoxから名前を取得してサーバーに送信する必要があります。
- サーバーは名前を読み取り、
clients_name
変数に追加します。その後、それを戻します(定期的に - それはwhileループです)。手順2で述べたような情報がリストボックスに表示されます。
あなたの質問 – Julius
に詳細なエラー出力を追加するか、プログラムが期待通りに動作しない方法についての詳細を追加してください。 – Julius
@Juliusエラーはありません。コードが機能していません。なぜ私はそれにデバッグした私のサーバーは、データを送信していません。そうだと分かった。私のclients_nameの形式は次のとおりです:['None'、 '\ x00']、私はclients_nameに名前(例えば:John)を追加しようとしています。私がそれを印刷するたびに、私は['None'、 '\ x00']を得ています。 –