Entwickler-Ecke
Open Source Projekte - Netzwerk-Chat
ObscurusNox - So 04.08.02 13:12
Titel: Netzwerk-Chat
Du sitzt an einem Netzwerk, vielleicht in einer großen Firma, und dein Kumpel sitzt in einem anderen Gebäude. Was tun ???
Ich hatte dieses Problem schon einmal und hab daher folgendes Programm geschrieben. Die meisten Firmen-Netzwerke haben allgemein zugängliche Laufwerke, auf denen sogar Guests Schreibrechte haben und ein solches Laufwerk hab ich mir zu nutzen gemacht.
Das praktische ist, dass man die in riesigen Netzwerken ja multible IP-Adresse nicht benötigt. Man muss nur ein Verzeichnis angeben, in dem die Protokoll-Datei gespeichert wird.
Außerdem hat man nicht die Probleme mit der Definition von Servern und Clients, der Chat ist für so ziemlich beliebig viele User zugänglich. Das Programm wir noch nicht perfekt sein, aber ich habe es selbst drei Wochen lange bei Bo***-Bl*******-Hildesheim während meines Praktikums getestet und soweit funktioniert's eigentlich.
(Fehler bitte melden :!: )
DOWNLOADEN MIT "ZIEL SPEICHERN UNTER"
Programme downloaden:
Pseudo-Chat.zip (279.261 Bytes) [
http://home.arcor.de/obscurusnox/source/Pseudo-Chat.zip]
Source downloaden:
Source.zip (56.686 Bytes) [
http://home.arcor.de/obscurusnox/source/source.zip]
Viel Spaß damit !!!
(21.09.02 00:09 Tino) Screenshot entfernt. Datei war nicht mehr vorhanden.
Arakis - Mi 14.08.02 10:45
Ist schon etwas besonderes, wenn im Internet eine Datei länger als 10 Tage überlebt :mrgreen:
Was ich damit sagen will ist einfach, dass beide Dateien plus Grafik nicht mehr das sind :wink:
Bis dann
bis11 - Mi 14.08.02 11:10
Hi Arakis,
probiere es mal mit Ziel speichern unter, dann funktioniert es.
Arakis - Mi 14.08.02 11:21
Na so was, geht ja doch :oops:
Trotzdem ist mir brinkster da nicht so ganz geheuer, normaler weise kann man ohne weiteres eine Datei anklicken und dann abspeichern(ohne Kontextmenü). Jetzt kommt beim nomalen Anklicken eine Fehlermeldung, vorhin kam aber gar nix.
Bis dann
Andi1982 - Fr 08.11.02 08:29
Titel: Ich finds spitze!
Hallo,
habe dein Prog mal getestet. Vielleicht liegt es ja daran dass ich mit Delphi noch nicht sehr viel Erfahrung habe, aber ich finde es sehr gut!!!
Wenn du erlaubst würde ich gerne eine Frage zum Quellcode stellen, will ja schließlich auch ein wenig lernen.
Aus welchem Grund hast du das hier gemacht:
Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin FOR i := 1 TO 100 DO IF Beende THEN Break; end; |
Hätte da nicht einfach die IF-Anweisung gereicht, also ohne die FOR-Schleife? Oder hast du es als Zeitverzögerer oder so verwendet? Ich als Anfänger sehe darin leider keinen sinn.
Gruß Andi
ObscurusNox - Fr 08.11.02 09:41
Hallo!
Natürlich beantworte ich deine Frage gerne.
Problem dabei: Ich habe dieses Programm vor fast einem Jahr geschrieben und weiß natürlich nicht mehr aus dem Kopf, was ich da gemacht habe. War auch noch ein sehr schlechter Stil, vom Quelltext, vonwegen Verständnisfähigkeit.
Wenn ich das gerade richtig gesehen habe, ist
Quelltext
1:
| procedure TForm1.Button2Click(Sender: TObject); |
die Function, die aufgerufen wird, wenn man auf
"abmelden" klickt.
"Beende" ist in diesem Fall keine Boolean-Variable, sondern eine Function, die eine Boolean-Wert zugewiesen kriegt. Guck dir die mal genauer an, vielleicht verstehst du was ich gemacht habe.
Wenn ich mich richtig erinnere hatte ich das Problem das auftritt, wenn zwei Programm gleichzeitig in die Datei schreiben. Also wenn ein Programm die Datei öffnet und reinschreibt, wenn der zweite noch beim schreiben ist, dann wird das, was der zweite geschrieben hat, ignoriert bzw. überschrieben.
Das Problem habe ich so gelöst, dass die Datei vor dem reinschreiben umbenannt wird, dadurch kann ein anderer nicht drauf zugreifen, wenn geschrieben wird.
Diese Schleife versucht jetzt 100 mal die Datei zu finden (wenn gerade in sie reingeschrieben wird, kann sie nicht gefunden werden!!!) und wenn es sie gefunden hat, wir hineingeschrieben, dass der Chat vom entsprechenden User verlassen wurde.
Ich hoffe, dass ich deine Frage damit einigermaßen beantworten konnte.
Du kannst mir natürlich gern weitere Fragen zu meinem Programm stellen,
MfG,
Markus.
Andi1982 - Fr 08.11.02 09:46
Achso, ja verstehe!
Darauf wär ich glaub nicht gekommen. Um solche Fehler zu finden muss man aber wirklich gut testen.
Ich glaub du hast es wirklich drauf!
Also vielen Dank für die schnelle Antwort!
Gruss Andi
eddyp - So 01.12.02 22:38
Diese chat - Geschichte ist echt ne gute Idee. Ich hab noch ein paar Zeilen dazugebastelt und nehme das ganze auch zum fernsteuern im Netz
so kan ich alle Computer im Netz wenn keiner mehr was macht abschalten oder die von allen natürlich nicht nicht gemachten Backups prüfen und automatisch nachholen. Hat mir sehr geholfen.
Nur in Button1Click nach dem Rewrite( Datei ) musste ich ein reset(datei) einfügen, sonst wurde die ganze Sache an manchen (nicht allen PC)extrem langsam (keine Ahnung warum!? (D6E, XPP))
ObscurusNox - Mo 02.12.02 07:50
Hm... also wenn ich das richtig verstanden haben:
In
Quelltext
1:
| procedure TForm1.Button1Click(Sender: TObject); |
läuft
Quelltext
1: 2: 3: 4: 5: 6:
| Rewrite( Datei ); Reset( Datei ); Write( Datei, DsxDatei ); CloseFile( Datei ); Memo2.Clear; ... |
schneller, als ohne das Rewrite( Datei ) ohne Reset ????
Das verstehe ich nun wirklich nicht.
Ich weiß, das ganze Ding ist kaum optimiert, aber warum XP damit ein Problem haben sollte weiß ich nicht.
Habe persönlich auch kein XP, mehr so ME.
Vielleicht kann's ja aber ein anderer User beantworten...!?!
MfG,
Markus.
ObscurusNox - Mo 02.12.02 20:32
@eddyp:
Vielleicht könntest du auch einfach mal deine Quellcode hier posten (wenn du willst). Könnte unter Umständen auch für andere User interessant sein.
Nur 'n Vorschlag.
MfG,
Markus.
eddyp - Mo 02.12.02 22:09
Ich habe nach 1,5 Jahren Telekom- Ignoranz jetzt DSL bekommen, das Haus verkabelt und wenn alles so läuft wie ich mal denke, kann mann dann downloaden.
@ObscurusNox
Aber emailen kann ich dir die geänderte Version gerne.
Mit dem Reset, das war nur Zufall, da das Prg. im Debugger normal lief und "live" genau dort bremste (aber nicht auf jedem PC), da versuchte ich es mit Reset.
Andi1982 - Do 09.01.03 09:41
Hallo,
hab inzwischen auch einiges am Chat geändert. Als erstes hab ich ihn aber umbenannt, die meisten Chefs sehen es nicht gerne wenn in der Taskleiste was mit "Chat" steht. Die bei uns angewendete Version nennt sich jetzt NT-Connect.
Außerdem hat jetzt jeder benutzer seine eigene Farbe und eine Art protokoll wird geführt. Dies ist aber nur für den Admin zugänglich.
Da bei uns sehr viele Scherzkekse arbeiten habe ich auch eingebaut dass man sich nur mit dem Namen einloggen kann mit dem man in Windows angemeldet ist. Als Admin hab ich mir aber ein paar kleine Hintertürchen offen gehalten.
Leider sieht der Quelltext jetzt aus wie sau, da er vorher schon sehr unübersichtlich war und ich mir beim einbauen der einzelnen Aktionen nicht wirklich viel Mühe gegeben habe.
Trotzdem passiert es immernoch sehr häufig dass der Chat sich aufhängt, hat gegen dieses Problem jemand ne lösung. Es ist immer der fall wenn 2 gleichzeitig schreiben.
Gruß Andi
ObscurusNox - Do 09.01.03 16:00
Hätte ja nicht gedacht, dass sich wirklich jemand die Mühe macht durch den Quellcode durchzusteigen...ist wirklich ein ganz schönes Chaos.
Meine Vermutung für deine Problem:
Zum reinschreiben wird die Chat-Datei ja umbenannt, damit eben nicht zwei Leute gleichzeitig hineinschreiben können. Wenn jetzt ein anderer schreiben will und die Datei nicht da ist, dann versucht er eine gewisse Zeit die Datei zu finden. Das reinschreiben vom andern dauert normalerweise nicht lange, deswegen ist das kein Problem.
Vielleicht fängst du in der Richtung mal an zu suchen. Ich denke mal, dass sich bei dir das Programm aufhängt, dass als zweites versucht zu schreiben, also erst die Datei nicht finden kann, sucht und sich dann wohl in einer Endlosschleife verfängt, oder so.
Werde mal gucken, ob ich dafür in meinem Quelltext anzeichen finde.
MfG,
Markus.
Lhid - Sa 18.10.03 12:55
Einstellung und mich grundlegend verändert-> alte beiträge gelöscht
ObscurusNox - Sa 18.10.03 12:58
Rechtsklick und "Ziel speichern unter..."!
Bei mir geht's.
PS: Ansonsten kannste mir auch per PM deine Mail-Adresse schicken und dann kriegste die Files per Mail.
Andi1982 - So 19.10.03 18:19
Hi,
gibt es zu dem Problem, dass er sich immer aufhängt wenn zwei gleichzeitig schreiben, inzwischen eine Lösung oder zumindest der genaue Grund dafür???
ObscurusNox - So 19.10.03 19:09
Hab eigentlich nie versucht das zu beheben.
Aber eigentlich düfte das Problem folgendes sein:
Wenn ein User in die Datei schreibt ist sie ja umbenannt.
Der andere, der gleichzeitig schreiben will sucht die Datei.
Schätze diese Suchfunktion ist irgendeine Repeat-Until-Schleife und das gefällt Windows nicht. Man kann ja auch in Delphi kein Delay wie in Pascal verwenden, weil das bei Multitasking tödlich wäre. Schätze da liegt der Fehler.
Programmiere grad (naja, seit einem Jahr) an einem Netzwerktool, mit IP-Chat usw. Das dürfte etwas ausgereifter sein, als der Pseudo-Chat.
ObscurusNox - So 19.10.03 19:18
Der Spaß ist ja schon etwas länger her.
Folgender Code wird bearbeitet, wenn die Datei nicht vorhanden ist:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| AssignFile( Datei, Dateiname ); i := 0; REPEAT inc( i ); {$I-} Reset( Datei ); {$I+} IF IoResult <> 0 THEN W := Messagedlg( 'Datei nicht gefunden !!! Nochmal versuchen ???', mterror, [mbYes,mbNo], 0 ); UNTIL (IoResult = 0) OR (i = 3) OR (W=mrNo); |
Schätze der hat Probleme mit dem "AssignFile".
Versuchs doch an der Stelle mal mit folgendem (ist jetzt so aus dem Stehgreif und nicht getestet):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var Bool : Boolean;
Bool := False; repeat for i := 1 to 3 do begin if FilesExists( Datei ) then begin AssignFile( Datei, Dateiname ); Reset( Datei ); Bool := True; end; end; if not Bool then W := Messagedlg( 'Datei nicht gefunden !!! Nochmal versuchen ???', mterror, [mbYes,mbNo], 0 ); until Bool or (W=mrNo); |
Solid Snake - Mi 06.04.05 19:15
hi
Dieser Thread ist zwar schon sehr alt aber eventuell hat ja jemand an dem Chat weiter gearbeitet oder sich mal intensiver damit beschäftigt!
Ich habe auch das Problem das der Chat hin und wieder abstürtzt!
Habe allerdings noch keine passende lösung dafür gefunden! :cry:
Ich hoffe ihr könnt mir da weiterhelfen! :)
mfg
Solid Snake
ObscurusNox - Mi 06.04.05 19:23
Wenn ich mir das heute so angucke denke ich eigentlich, dass man das am Besten alles nochmal programmieren sollte ;-)
Ich hab mir damals ja nichtmal die Mühe gemacht, Buttons zu benennen...
Außerdem denke ich, dass das verwendete System mit dem Datei-Handling recht unoptimiert und fehlerhaft ist.
Solid Snake - Do 07.04.05 02:46
Zitat: |
Wenn ich mir das heute so angucke denke ich eigentlich, dass man das am Besten alles nochmal programmieren sollte |
Toll um den Chat komplett selbst zu Programmieren fehlen mir leider doch noch ein paar Delphi kentnisse :oops:
Zitat: |
Ich hab mir damals ja nichtmal die Mühe gemacht, Buttons zu benennen... |
Kein Problem! Ich habe das noch gemacht :rofl:
Arbeitest du jetzt dann noch weiter an dem Chat oder bin ich ab jetzt auf mich alleine gestellt? :gruebel:
Ich hoffe du arbeitest da noch etwas weiter dran! :flehan:
mfg
Solid Snake
Andi1982 - Do 07.04.05 07:12
Wir hatten damals auch das Problem dass das ding dauernd abgestürzt ist, vorallem wenn mehrere gleichzeitig abgedrückt haben...
am besten wäre es echt das ding nochmal neu zu schreiben...
Aber hat uns trotzdem jede menge spass gebrach :)
ObscurusNox - Do 07.04.05 22:39
Solid Snake hat folgendes geschrieben: |
Arbeitest du jetzt dann noch weiter an dem Chat oder bin ich ab jetzt auf mich alleine gestellt? :gruebel: |
Also ehrlich gesagt war das Projekt schon abgeschlossen, als ich's hier gepostet hab. Bin da also auch nicht mehr so wirklich drin, was ich damals fabriziert hab. Das Grundprinzip ist noch klar, aber was die Details angeht...
Solid Snake hat folgendes geschrieben: |
Toll um den Chat komplett selbst zu Programmieren fehlen mir leider doch noch ein paar Delphi kentnisse :oops: |
Das ist aber eigentlich gar nicht sooo kompliziert. Ich würde diesmal auch die Kommunikation über TCP/IP bevorzugen, also die Client- & ServerSocket Komponenten benutzen. Oder man muss sich für das bisherige System nochmal etwas mit der Datei-Verwaltung auseinander setzen.
Kann ja nicht sein, dass ein Windows-Programm die ganze Zeit an der Rechenpower zieht, nur um 1000 mal zu versuchen eine Datei zu öffnen. Da gibt's bestimmt elegantere Möglichkeiten.
Eine spontane Idee wäre, dass jeder User in seine eigenen Datei schreibt und jeder alle Dateien ausließt, dann gäb's die Schreib-Probleme nicht. Allerdings müsste man dann nach dem auslesen alles in die richtige Reihenfolge sortieren...
Wäre natürlich bereit dabei zu helfen das Ding neu zu gestalten, wenn es Vorstellungen gibt was bei rauskommen soll.
Was meint ihr???
Solid Snake - Di 12.04.05 15:39
Zitat: |
Ich würde diesmal auch die Kommunikation über TCP/IP bevorzugen, also die Client- & ServerSocket Komponenten benutzen. |
Die bessere lösung währe das auf jeden fall! Aber eigentlich bin ich mit dem Chat so ganz zufrieden bis auf die Abstürtze :wink:
Da ich den Chat in der Schule benutze und das Jahr ja nicht mehr so lange geht wollte ich eigentlich nicht bei 0 anfangen und alles neu Programieren!
Zitat: |
Wäre natürlich bereit dabei zu helfen das Ding neu zu gestalten, wenn es Vorstellungen gibt was bei rauskommen soll. |
Den Chat habe ich ja soweit an meine bedürfnisse angepasst! Klappt auch alles Wunderbar! Nur das Problem ist halt immernoch das der Chat manchmal Abstürtzt!
Auf der Ersten Seite hattest du ja eine eventuelle lösung für das Problem gepostet doch die funktioniert irgendwie nicht so richtig :(
Ich habe leider keine ideen mehr wie man das Problem mit den Abstürtzen lösen könnte!
Für etwas hilfe oder sogar ein paar Code Schnipsel währe ich sehr dankbar!
ObscurusNox - Di 12.04.05 17:36
Ich nehme an, dass folgender Code das Problem verursacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin IF (Length( Edit2.Text ) > 0) AND (Length( Edit2.Text ) < 255) THEN BEGIN DeleteFile( Dateipfad+'temp.tmp' ); Bool := False; REPEAT {$I-} Bool := RenameFile( Dateiname, Dateipfad+'temp.tmp' ); {$I+} UNTIL (IoResult = 0) AND Bool; AssignFile( Datei, Dateipfad+'temp.tmp' ); Reset( Datei ); [...] |
Button1 ist der "Abschicken"-Button, mit dem eine Nachricht verschickt wird.
Daraufhin versucht das Programm das normale Datei zu finde (die nur da ist, wenn nicht grad ein anderer schreibt) und in temp.tmp umzubenennen, um dann reinzuschreiben und sie wieder zurück zu benennen.
Ich hab's zwar nicht getestet, aber ich denke, dass die Repeat-Until-Schleife ein Problem darstellt. Ich weiß zwar nicht wirklich wie lange so ein Schreibvorgang dauert (Datei umbenennen, reinschreiben, zurück benennen), aber ich denke die Schleife wird da schon so einige Male durchlaufen.
Vielleicht sind aber auch die {$I-} und {$I+} das Problem. Diese bewirken, dass kein Error erscheint, falls die Datei nicht vorhanden ist (funktioniert auch für Reset( Datei )).
Du könntest also versucht, diese ganze Abfrage mit einem TTimer zu kombinieren. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| procedure TForm1.Timer1Timer(Sender: TObject); begin IF (Length( Edit2.Text ) = 0) or (Length( Edit2.Text ) > 254) THEN BEGIN Messagedlg( 'Sie müssen zwischen 1 und 255 Zeichen eingeben !!!', mterror, [mbok], 0 ); Timer1.Enabled := False; Edit2.SetFocus; END else if FileExists( Dateiname ) then begin DeleteFile( Dateipfad+'temp.tmp' ); RenameFile( Dateiname, Dateipfad+'temp.tmp' ); Timer1.Enabled := False; Abschicken; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := True; end;
procedure Abschicken; begin AssignFile( Datei, Dateipfad+'temp.tmp' ); Reset( Datei ); Inc( DsxDatei.LastInput ); IF DsxDatei.LastInput > 15 THEN BEGIN FOR i := 2 TO 15 DO BEGIN DsxDatei.Inputs[ i-1 ] := DsxDatei.Inputs[ i ]; END; DecodeTime( Time, Hour, Min, Sek, Sek100 ); Str( Hour, StrHour ); IF Hour < 10 THEN StrHour := '0' + StrHour; Str( Min, StrMin ); IF Min < 10 THEN StrMin := '0' + StrMin; DsxDatei.Inputs[ 15 ].User := EnCode( UserName ); DsxDatei.Inputs[ 15 ].Time := EnCode( StrHour + ':' + StrMin ); DsxDatei.Inputs[ 15 ].Comment := EnCode( Edit2.Text ); DsxDatei.LastInput := 15; END ELSE BEGIN DecodeTime( Time, Hour, Min, Sek, Sek100 ); Str( Hour, StrHour ); IF Hour < 10 THEN StrHour := '0' + StrHour; Str( Min, StrMin ); IF Min < 10 THEN StrMin := '0' + StrMin; DsxDatei.Inputs[ DsxDatei.LastInput ].User := EnCode( UserName ); DsxDatei.Inputs[ DsxDatei.LastInput ].Time := EnCode( StrHour + ':' + StrMin ); DsxDatei.Inputs[ DsxDatei.LastInput ].Comment := EnCode( Edit2.Text ); END;
Rewrite( Datei ); Write( Datei, DsxDatei ); CloseFile( Datei ); ListBox1.Items.Clear; FOR i := 1 TO 20 DO BEGIN IF DsxDatei.UserName[ i ] <> '' THEN BEGIN ListBox1.Items.Add( DeCode( DsxDatei.UserName[ i ] ) ); END; END; Memo1.Clear; FOR i := 1 TO DsxDatei.LastInput DO BEGIN Memo1.Lines.Add( DeCode( DsxDatei.Inputs[ i ].User ) + ' (' + DeCode( DsxDatei.Inputs[ i ].Time ) + '): ' + DeCode( DsxDatei.Inputs[ i ].Comment ) ); END; RenameFile( Dateipfad+'temp.tmp', Dateiname ); Alter := FileAge( Dateiname ); Edit2.Text := ''; Edit2.SetFocus; end; |
Dann stellste den TTimer auf 100ms oder sowas. Dann versucht er noch 10x pro Sekunde die Datei zu finden. Wenn er sie gefunden hat, benennt er sie sofort um (damit kein anderer reinschreiben kann) und führt dann alles aus, was vorher nach der problematischen Repeat-Until-Schleife kam.
Zusätzlich könntest du noch was optische einbauen, dass man den Versuch des Absendens sieht. Z.B. eine TStatusBar, die immer mehr Punkte kriegt "........................." oder sowas.
Hab's nicht getestet, dürfte aber einen Versuch wert sein. Probier's mal aus.
Solid Snake - Di 19.04.05 18:48
@ ObscurusNox
erstmal danke das du so schnell geantwortet hast!
Deine idee die du da hast sollte eigentlich Funktionieren! In der theorie macht es aufjedenfall schonmal mehr sinn als der alte Code! :wink:
Ich habe probiert den "neuen" Code einzubauen doch der Compiler bombadiert mich förmlich mit Fehlern! :cry:
Ich bekomme z.b. die Meldung:
Undifinierter Bezeichner: 'Edit_Message'
Edit Message ist bei mir das Edit Feld in dem die Nachricht eingegeben wird! Bei dir war das glaube Edit2!
Die gleiche Fehlermeldung bekomme ich noch bei dem Memo wo die ganzen nachrichten drin sind und bei der ListBox der User!
Wo dran kann das liegen??
Ich komme irgendwie nicht mehr weiter :cry:
ObscurusNox - Di 19.04.05 19:54
Nehme mal an du hast für die bessere Übersicht die ganzen Objekte sinnvoll benannt. Bei mir sind die ja, wie Delphi sie benannt hat.
Hierzu sind die in meinem Code verwendeten Bezeichner gut:
Edit2: Eingabe-Feld für den zu sendenden Text
Timer1: wäre der neue Timer
ListBox1: Userliste
Memo1: Chatroom-Text
Mehr hab ich grad nicht gefunden.
Hoffe das löst deine Probleme. Musst die jetzt halt so benennen, wie sich bei dir heißen. Dazu kann ich die "Ersetzen" Funktion empfehlen. Weiß nicht ob du die kennst:
Strg+R (Replace) öffnet ein Dialogfenster zum Ersetzen von Text.
Oder Dateimenü: Search -> Replace (eng.) / Suchen -> Ersetzen (dt.)
MfG,
Markus.
Solid Snake - Di 19.04.05 20:18
Ich habe sie ja entsprechend umbenannt!
Doch jetzt bekomme ich ja den Fehler!
Deswegen finde ich das irgendwie seltsam!
Andi1982 - Mi 20.04.05 06:42
Hi,
such doch einfach mal in deinem Code nach Edit_Message und schau was der da macht mit dem Feld! Wenn du dir nicht sicher bist kannst du die stelle ja posten...
Solid Snake - Mi 27.04.05 17:07
So hab es geschafft! War ein dummer Fehler! :lol:
Ich hatte die Procedure "Abschicken" oben in der Prozedureliste <-- (hat die einen extra namen??) folgendermassen eingetragen:
procedure Abschicken;
Was auch richtig war nur die eigentliche Procedure musste nicht
Delphi-Quelltext
1: 2:
| procedure Abschicken; begin |
sondern
Delphi-Quelltext
1: 2: 3:
| procedure TMainForm.Abschicken(); var i : Integer; begin |
lauten!
Und jetzt funktioniert es auch wunderbar! :D
Muss es aber noch im härtetest mit vielen leuten ausprobieren!
Sollte aber eigentlich jetzt kein Problem mehr sein!
Aber eine Frage hätte ich da noch :wink:
Kann man irgendwie die .DSX datei schützen?
Also das nur der Chat Schreib - und Leserechte hat und man die Datei solange noch einer im Chat ist nicht von Hand löschen kann!
Desweiteren sollte man die Datei auch nicht mit dem "Editor" oder sonstwas öffnen können um was zu verändern und die Datei dann wieder zu speichern!
Wenn die Datei dann noch mit dem Attribut "Versteckt" sein würde, währe es ein absoluter traum! :wink:
Kann man sowas irgendwie realisieren?
Solid Snake - Mo 16.05.05 19:04
Zitat: |
Aber eine Frage hätte ich da noch
Kann man irgendwie die .DSX datei schützen?
Also das nur der Chat Schreib - und Leserechte hat und man die Datei solange noch einer im Chat ist nicht von Hand löschen kann!
Desweiteren sollte man die Datei auch nicht mit dem "Editor" oder sonstwas öffnen können um was zu verändern und die Datei dann wieder zu speichern!
Wenn die Datei dann noch mit dem Attribut "Versteckt" sein würde, währe es ein absoluter traum!
Kann man sowas irgendwie realisieren? |
Habe mein Problem jetzt einfach mit den beiden Datei Attributen "faReadOnly" und "faHidden" gelöst! Die noch in eigene Prozeduren gepackt (FileProtectionOn) und (FileProtectionOff) und an den benötigten stellen einfach aufgerufen!
Klappt wunderbar!
Danke für eure Hilfe
drummer123 - Do 11.08.05 10:32
Titel: Re: Netzwerk-Chat
ObscurusNox hat folgendes geschrieben: |
Du sitzt an einem Netzwerk, vielleicht in einer großen Firma, und dein Kumpel sitzt in einem anderen Gebäude. Was tun ???
Ich hatte dieses Problem schon einmal und hab daher folgendes Programm geschrieben. Die meisten Firmen-Netzwerke haben allgemein zugängliche Laufwerke, auf denen sogar Guests Schreibrechte haben und ein solches Laufwerk hab ich mir zu nutzen gemacht.
Das praktische ist, dass man die in riesigen Netzwerken ja multible IP-Adresse nicht benötigt. Man muss nur ein Verzeichnis angeben, in dem die Protokoll-Datei gespeichert wird.
Außerdem hat man nicht die Probleme mit der Definition von Servern und Clients, der Chat ist für so ziemlich beliebig viele User zugänglich. Das Programm wir noch nicht perfekt sein, aber ich habe es selbst drei Wochen lange bei Bo***-Bl*******-Hildesheim während meines Praktikums getestet und soweit funktioniert's eigentlich.
(Fehler bitte melden :!: )
DOWNLOADEN MIT "ZIEL SPEICHERN UNTER"
Programme downloaden: Pseudo-Chat.zip (279.261 Bytes) [http://home.arcor.de/obscurusnox/source/Pseudo-Chat.zip]
Source downloaden: Source.zip (56.686 Bytes) [http://home.arcor.de/obscurusnox/source/source.zip]
Viel Spaß damit !!!
(21.09.02 00:09 Tino) Screenshot entfernt. Datei war nicht mehr vorhanden. |
hey echt respekt ist richtig geil der Chat !!!!
150gozilla - Fr 26.08.05 16:49
ich habe den chat mal privat nen bissl erweitert.
Seid dem hängt sich der chat auch nicht mehr auf, wenn 2 leute gleichezeitig chatten ^^
CeeJay D-Magic - Mi 31.08.05 10:14
Das klingt wirklich alles sehr interressant, allerding ginge doch auch folgendes:
Man nehme die TClient & TServer und baut daraus ein chat.
Wegen der IP kann man dann den Server (dessen Ip-Adresse) auf einem Netzordner in einer ".txt" (o.ä.) Speichern und ein anderes Programm (Welches nun als Client fungiert) ruft es auf um sich dann mit der IP beim Server einzuloggen, so hat man nicht das Problem, mit dem gleichzeitig schreiben und es ist auch leichter zu Programmieren.
Das war nur eine Weitere Lösung...
MFG, CeeJay D-Magic
P.S.: Mir fällt ein,
Hier kann man sich ein Beispiel Downloaden, wie das mit TCP/IP funzt:
http://www.delphi-forum.de/topic_Probleme+mit+Chatprogramm_43227,20.html
Hoffe es hilft
150gozilla - Mi 31.08.05 12:37
Ja, das mit dem Dateipfad, das verstehen einige nicht
Ivo@CoMRoK - Mo 06.02.06 19:27
@Andy1982:
Machs doch mal so dass du ne zweite Datei mit einbaust :arrow: da schreibst du n Boolean rein :arrow:
- wenn jemand was schreibt und der( :?: ) Boolean ist auf false kann er in die eigentliche Datei was speichern
und der Boolean wird auf true gesetzt :arrow: wenn das Prog mit speichern fertig ist wir der Boolean wieder auf false
gesetzt
- wenn jemand was schreibt und der Boolean ist auf true :arrow: dann lass ihn ne 1/4 Sekunde warten und versuchs dann
nochmal.
Hoffe geholfen zu haben. :wink:
Fighter#1 - Mo 06.02.06 19:34
Du musst überprüfen ob der angegebene Pfad existiert
Zu sätzlich würd ich falls der Pfad nicht existiert ne
Frage machen ob er erstellt werden soll.
Sons ganz hübsch
Wieso wird die Dsx Datei gelöscht?
Wenn sie dableibt lönnte man sie ja nachher wiederverwenden und
noch nach Tagen mit dem Selben Chat weitermachen.
Terra - Mi 08.02.06 15:25
Sehe diesen Topic dummerweise erst jetzt aber wollte nochmal was zu den Anfangstheard sagen.
Da stand:
Zitat: |
Du sitzt an einem Netzwerk, vielleicht in einer großen Firma, und dein Kumpel sitzt in einem anderen Gebäude. Was tun ??? |
Hmm .. wie soll ich das sagen ohne mich hier unbeliebt zu machen. :-)
Sage nur... benutzen wir doch WinChat ^^ .. Bin mir nicht sicher wegen ältere Betriebsysteme aber bei XP ist so ein Netzwerkchat standartmäßig dabei.
Zu finden unter C:\windows\system32\winchat.exe
Aber ein eigenen Netzwerkchat zu schreiben finde ich natürlich auch klasse. Schöne Arbeit.
Terra
Xion - Do 23.02.06 21:36
ich frage mich, warum ihr nicht mit einer boolean-variable arbeitet und stattdessen den dateinamen ändert. (Das Problem ist, ich kann den Code nicht runterladen, deßhalb weiß ich nicht genau wie du arbeitest).
Ich mache demnächst vielleicht auch einen Chat, kommt darauf an ob ich morgen in der schule irgendwie eine datei im netzwerk freigeben kann. ich würde aber mit einer Datenbank arbeiten, da ich in diesem bereicht schon Erfahrung habe.
cu
Xion - So 26.02.06 12:12
hi
ok, dass mit der datenbank mach ich doch nicht :oops:
ich machs jetzt mit dateien, pro user eine (temporär).
sobald du eine nachricht an ihn schickst, wird die datei erzeugt.
wenn er dann den text in sein Memo-Feld lädt, löscht er die datei. somit gibts kaum probleme mit mehrfachzugriff.
bye
gbst51sc - Mo 10.07.06 13:35
Ich habe mir mal erlaubt, das Programm layoutmäßig zu überarbeiten, die funktionalität ist ja einwandfrei.
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!