Hallo Leute,
sicherlich kennt jeder von Euch das Chatbeispiel mit dem Client- und Serverprogramm.
Meine Frage:
Hat schon jemand zu dem Python Chatbeispiel eine grafische Oberfläche programmiert, in dem man die IP-Adresse und Nachricht ein gibt und auch Nachricht wieder erhält?
Ich würde mich freuen, wenn Ihr mir helfen könnt.
hier das Beispiel:
http://www.galileocomputing.de/openbook ... 0a8629087d
Tcp/IP-Grafische Oberfläche
Ja hab sowas mal gemacht aber nicht fertig und war auch so das erste was ich in Python gemacht hatte also nicht wundern
hab 3 datein eine davon ist auf einen server .... bei mir Funpic.de weils kostenlos ist ^^
also der server:
Client
und die PHP datei
Der server holt sich die IP vom funpic server und schreibt diese per FTP in die ip.txt beim server ... der Client holt sie sich und kann dann connecten
hab 3 datein eine davon ist auf einen server .... bei mir Funpic.de weils kostenlos ist ^^
also der server:
Code: Alles auswählen
import socket
import select
from ftplib import FTP
import urllib
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 51000))
server.listen(10)
clients = []
try:
f = urllib.urlopen('URL zur PHP IP site')
for zeile in f:
sip = str(zeile)
f.close()
except:
print 'IP konnte nicht ermittelt werden!'
try:
f = open('ip.txt', 'w')
f.write(sip)
f.close()
f = open('ip.txt', 'r')
fip = FTP('FTP ADDR')
fip.login("USER", "PW")
fip.storlines("STOR ip.txt", f)
fip.quit()
f.close()
except:
print "Fehler beim IP versenden!"
else:
print 'IP wurde gegeben'
command = raw_input()
user = {}
userlist = []
userlogin = {}
try:
userdat = open('user.dat', 'r')
for line in userdat:
line2 = line.split(':')
userlogin = {line2[1] : line[2]}
userdat.close()
except:
userdat = open('user.dat', 'w')
userdat.close()
def usersend(users,clients):
usertext = ''
for user in users:
print user
usertext += '|'+user
usertext += '|'
for client in clients:
client.send('-user'+usertext)
if command == "start":
try:
while True:
lesen, schreiben, oob = select.select([server] + clients, [], [])
for sock in lesen:
if sock is server:
client, addr = server.accept()
clients.append(client)
print "+++ Client %s verbunden" % addr[0]
else:
try:
nachricht = sock.recv(1024)
except:
print "Eine Verbindung wurde abgebrochen!"
userlist.remove(user[sock])
clients.remove(sock)
else:
ip = sock.getpeername()[0]
if nachricht != "-close":
msg = nachricht.split('|')
if msg[0] == "-chat":
s = "%s: %s" % (user[sock], msg[1])
print s
for csend in clients:
csend.send(user[sock]+': '+msg[1])
if msg[0] == '-login':
if msg[1] in userlogin:
if userlogin[msg[1]] == msg[2]:
user = {sock : msg[1]}
for csend in clients:
csend.send(msg[1] + " connected zum Server")
#csend.send('-useradd|'+msg[1])
print msg[1] + " logged in"
else:
user = {sock : msg[1]}
userlogin = {msg[1] : msg[2]}
userdat = open('user.dat', 'w')
userdat.write(msg[1]+':'+msg[2])
userdat.close()
userlist.append(msg[1])
usersend(userlist,clients)
else:
print "+++ Verbindung zu %s beendet" % ip
userlist.remove(user[sock])
sock.close()
clients.remove(sock)
finally:
for c in clients:
c.close()
server.close()
Code: Alles auswählen
#Main.py
#created by Hillkorn
import wx
import socket
import time
import threading
import thread
import urllib
import time
class cmwindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Messenger', wx.DefaultPosition, wx.Size(400,400))
#Variablen
self.einstellungen = {"Acc" : "",
"PW" : ""}
self.isconnect = False
self.ifip = True
try:
f = urllib.urlopen('URL zur IP TXT')
for zeile in f:
self.ip = str(zeile)
f.close()
except:
self.ip = ""
try:
f = open("einstellungen.dat", "r")
except:
f = open("einstellungen.dat", "w")
else:
for line in f:
vars = line.strip()
vars = vars.split(" ")
self.einstellungen[vars[0]] = vars[1]
f.close()
#MenuBar
menubar = wx.MenuBar()
programm = wx.Menu()
einstellungen = wx.Menu()
help = wx.Menu()
programm.Append(105,'&Quit\tCtrl+Q', 'Quit the Application')
self.Bind(wx.EVT_MENU, self.onQuit, id=105)
einstellungen.Append(110,'Benutzer', 'Benutzerdaten')
einstellungen.Append(111,'Get Server IP', 'IP Adresse holen')
self.Bind(wx.EVT_MENU, self.onBenutzer, id=110)
self.Bind(wx.EVT_MENU, self.onGetip, id=111)
menubar.Append(programm,'&Programm')
menubar.Append(einstellungen, '&Einstellungen')
menubar.Append(help, '&Hilfe')
self.SetMenuBar(menubar)
self.CreateStatusBar()
#FensterInhalt
box1 = wx.BoxSizer(wx.HORIZONTAL)
box2 = wx.BoxSizer(wx.HORIZONTAL)
box3 = wx.BoxSizer(wx.VERTICAL)
panel = wx.Panel(self, -1)
#panel2 = wx.Panel(panel, -1, size=(210,35))
#text widgets
self.text = wx.TextCtrl(panel, -1, style= wx.TE_READONLY | wx.TE_MULTILINE)
box1.Add(self.text, 2, wx.BOTTOM | wx.RIGHT | wx.EXPAND, 10)
self.etext = wx.TextCtrl(panel, -1, style= wx.TE_MULTILINE)
box2.Add(self.etext, 1, wx.EXPAND |wx.RIGHT, 10)
#userliste
self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
self.list.InsertColumn(0, 'User')
self.list.InsertColumn(1, 'Status')
#self.list.SetColumnWidth(0, 150)
#self.list.SetColumnWidth(0, 150)
#self.list.InsertStringItem(0,'User')
#self.list.SetStringItem(0,1,'Status')
box1.Add(self.list, 1, wx.EXPAND | wx.RIGHT | wx.BOTTOM, 10)
#buttons
boxb = wx.BoxSizer(wx.VERTICAL)
btn = wx.Button(panel, 11,"Senden")
boxb.Add(btn, 0, wx.RIGHT, 5)
btn = wx.Button(panel, 12,"Clear")
boxb.Add(btn, 0)
self.btnconnect = wx.Button(panel, 13,"Connect")
boxb.Add(self.btnconnect, 0)
self.Bind(wx.EVT_BUTTON, self.onSend, id= 11)
self.Bind(wx.EVT_BUTTON, self.onClear, id= 12)
self.Bind(wx.EVT_BUTTON, self.onConnect, self.btnconnect)
box2.Add(boxb, 0)
box3.Add(box1, 1, wx.EXPAND)
box3.Add(box2, 0, wx.EXPAND)
panel.SetSizer(box3)
def onQuit (self, event):
if self.isconnect is True:
self.socket.send("-close")
self.socket.close()
#time.Sleep(2000)
self.Close()
def onBenutzer(self, event):
bdialog = cbenutzer(self)
def onGetip(self, event):
f = urllib.urlopen('URL ZUR IP TXT')
for zeile in f:
self.ip = str(zeile)
f.close()
def empf(self):
while self.isconnect:
try:
msg = self.socket.recv(1024)+"\n"
usersplit = msg.split('|')
if '-user' == usersplit[0]:
usersplit.remove('-user')
usersplit.remove('\n')
s = self.list.GetItemCount()
#if s > 0:
# s += 1
for i in range(s,-1,-1):
wx.CallAfter(self.list.DeleteItem, i)
pass
z = 0
for user in usersplit:
wx.CallAfter(self.list.InsertStringItem, z, user)
z +1
else:
wx.CallAfter(self.text.AppendText, msg)
except:
wx.CallAfter(self.text.AppendText, 'iergendein scheiss fehler -.-')
def login(self):
self.socket.send('-login|'+self.einstellungen["Acc"]+'|'+self.einstellungen["PW"])
def onConnect(self, event):
if self.isconnect is not True:
try:
self.text.AppendText('Verbinde...')
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.ip ,51000))
except:
self.text.AppendText('Fehler beim Verbinden! Bitte pruefen sie der 51000 Port frei ist.')
else:
self.login()
self.text.AppendText("Erfolgreich verbunden\n")
self.btnconnect.SetLabel("Disconnect")
self.isconnect = True
thread.start_new_thread(self.empf, ())
else:
try:
self.socket.send("-close")
self.socket.close()
except:
self.text.AppendText("Fehler beim Beenden der Verbindung!")
else:
self.text.AppendText("Erfolgreich getrennt")
self.btnconnect.SetLabel("Connect")
self.isconnect = False
def onSend(self, event):
if self.isconnect is True:
self.socket.send("-chat|"+self.etext.GetValue())
self.etext.SetValue("")
else:
self.text.AppendText('Sie sind nicht mit dem Server Verbunden!')
def onClear(self, event):
self.etext.SetValue("")
class cbenutzer(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, "Benutzer Daten", wx.DefaultPosition, wx.Size(200,130))
self.einstellungen = parent.einstellungen
if parent.ip:
self.ip = parent.ip
box = wx.BoxSizer(wx.VERTICAL)
boxacc = wx.BoxSizer(wx.HORIZONTAL)
boxpw = wx.BoxSizer(wx.HORIZONTAL)
st = wx.StaticText(self, 10, "Account: ")
self.acc = wx.TextCtrl(self, -1)
self.acc.SetValue(parent.einstellungen["Acc"])
if self.einstellungen["PW"] == "":
self.pw.SetValue("default")
boxacc.Add(st, 0)
boxacc.Add(self.acc, 1, wx.LEFT, 30)
box.Add(boxacc, 0)
st = wx.StaticText(self, 11, "Passwort: ")
self.pw = wx.TextCtrl(self, -1, style= wx.TE_PASSWORD)
self.pw.SetValue(parent.einstellungen["PW"])
if self.pw.GetValue == "":
self.pw.SetValue("default")
boxpw.Add(st, 0)
boxpw.Add(self.pw, 1, wx.LEFT | wx.BOTTOM, 25)
box.Add(boxpw, 0)
buttons = self.CreateButtonSizer(wx.OK | wx.CANCEL)
box.Add(buttons, 0, wx.ALIGN_CENTRE)
self.Bind(wx.EVT_BUTTON, self.onOK, id= wx.ID_OK)
self.Bind(wx.EVT_BUTTON, self.onCancel, id= wx.ID_CANCEL)
self.SetSizer(box)
self.Show(True)
def onOK(self, event):
self.einstellungen["Acc"] = str(self.acc.GetValue())
self.einstellungen["PW"] = str(self.pw.GetValue())
f = open("einstellungen.dat", "w")
for key in self.einstellungen:
f.write(key + " " + self.einstellungen[key] + "\n")
f.close()
self.Show(False)
def onCancel(self, event):
self.Show(False)
class cprogramm(wx.App):
def OnInit(self):
frame = cmwindow()
frame.Show(True)
return True
app = cprogramm()
app.MainLoop()
Code: Alles auswählen
<?
$ipadresse ="$REMOTE_ADDR";
echo $ipadresse;
?>