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 ^^
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()
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