| Autor |
Beitrag |
darkdester
      
Beiträge: 100
|
Verfasst: Do 22.09.05 16:45
hoi
hab problem mit meinem chat
will was senden
es sollt kommen
nick:text
aber es kommt wenn ich bsp hallo sende nur
allo(crypt zeichen, kann nich kopiren)nick
bei mehrfach senden is der nick immer mehrfach
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type CustomRec = Record Text: String[255]; end;
Rec: CustomRec;
with Rec do begin Text :=Edit3.Text; end; ClientSocket1.Socket.SendBuf(Rec,sizeof(Rec));
Socket.ReceiveBuf(Rec,SizeOf(Rec)); with Rec do begin nick:=Text; Memo1.Lines.Add(nick + ':' +Socket.ReceiveText); end; |
hab keine idee warum das ne funzt
kann mir plz jemand helfe?
thx im voraus
mfg darkdester
Moderiert von raziel: Code- durch Delphi-Tags ersetzt
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 23.09.05 00:42
Moin!
Warum verwendest du ein Record und nicht .SendText bzw. .RecieveText?
Dein Code ist eher rätselhaft, sprich, der Zusammenhang ist beim rauskürzen der Passagen flöten gegangen. Poste mal mehr Code...
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 23.09.05 18:05
ja sry hab nur die relevanten code abschnitte gepostet
kann nich nochmal recievetext verwenden weil ich das schon für den text brauche!
will mit dem buffer den nickname senden
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| if ClientSocket1.Active then ClientSocket1.Socket.SendText(Edit2.Text); with Rec do begin Text :=Edit3.Text; end; ClientSocket1.Socket.SendBuf(Rec,sizeof(Rec));
var nick:string; begin Socket.ReceiveBuf(Rec,SizeOf(Rec)); with Rec do begin nick:=Text; Memo1.Lines.Add(nick + ':' +Socket.ReceiveText); |
wenn ich zB Hallo sende und der nickname : Nickname ist
komtm das an:
allonickname
zwischn allo und nickname is zeichen was er nich darstellen kann :/
Moderiert von raziel: Code- durch Delphi-Tags ersetzt
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 23.09.05 18:17
Moin!
darkdester hat folgendes geschrieben: | | ja sry hab nur die relevanten code abschnitte gepostet |
Ähm, das aktuelle Code-Fragment ist auch nicht viel besser, MEHR CODE...
darkdester hat folgendes geschrieben: | kann nich nochmal recievetext verwenden weil ich das schon für den text brauche!
will mit dem buffer den nickname senden |
Hä?  Du hast das was ziemlich grundlegend nicht verstanden, fürchte ich.
Mach das doch mal so:
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:
| var Command: TStringList;
Command := TStringList.Create;
begin Command.Add('Enter'); Command.Add('Heino'); Command.Add(''); ClientSocket1.SendText(Command.CommaText); [...]
begin Command.CommaText := Socket.RecieveText; if (Command.Strings[0] = 'Enter') then Memo1.Lines.Add(Command.Strings[1]+' betritt den Chat.') else if (Command.Strings[0] = 'Leave') then else if (Command.Strings[0] = 'Say') then else if (Command.Strings[0] = 'Shout') then Command.Free; |
Das ganze ist mehr als Denkanstoss zu sehen, der Code wird so nicht direkt funktionieren.
Dieses Konzept nennt man Protokoll; such mal hier danach, wirst eine Menge sehr aufschlussreicher Threads dazu finden.
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Fr 23.09.05 21:44
wie soll das gehn? ich verwende recievetext doch schon!
da würde ich ja den text durcheinanderschmeißen
ich muss TEXT und NICK gleichzeitig senden!
was daran nich zu verstehn
thx für den vorschlag aber erklärt mir mal lieber wieso das mit dem buffer nicht geht
hab das von hier abgeschaut
www.dsdt.info/tutorials/winsocket/?page=5
wieso funzt das einfahc nich O.o?
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 02:04
Moin!
darkdester hat folgendes geschrieben: | wie soll das gehn? ich verwende recievetext doch schon!
da würde ich ja den text durcheinanderschmeißen
ich muss TEXT und NICK gleichzeitig senden! |
Dann schau dir bitte das Beispiel noch einmal sehr genau an; exakt das ermöglicht es dir. Abgesehen davon sind .SendText und .SendBuf praktisch die gleiche Prozedur, lediglich die Parameter unterscheiden sich etwas, in beiden Fällen wird aber einfach ein Stück Speicher versendet. Bei .SendText eben ein String (ab Adresse des ersten Zeichens und soviele Zeichen, wie im String sind) und bei .SendBuf ab Adresse der Buffers soviele Zeichen, wie übergeben. Wenn du also .SendBuf mit der Stringadresse und Length(String) übergibt, tut es das gleiche...
darkdester hat folgendes geschrieben: | | was daran nich zu verstehn |
Tja, das frag ich mich auch...
darkdester hat folgendes geschrieben: | thx für den vorschlag aber erklärt mir mal lieber wieso das mit dem buffer nicht geht
wieso funzt das einfahc nich O.o? |
Dazu ist das Code-Fragment einfach zu klein, da kann man doch nix erkennen.
Also, nochmal langsam zum mitlesen: Lass das mit den Records und nimm nur .SendText, ist eh das gleiche. Um mehrere Parameter zu senden, baust du dir ein Protokoll; wie, habe ich dir bereits vorgeschlagen.
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 10:30
fehler
Listenindex überschreitet das Maximum 0
nopaste.biz/?2783
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 11:30
...Fehler, Link, kein erklärendes Wort...
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 11:46
hm??
was soll ich den noch sagen?
hab fehler gesagt
sourcecode gegeben
was den noch???
edit:
also add.command(edit3.text) ja?
so
zum empfangen
Delphi-Quelltext 1: 2:
| Command.CommaText:=ClientSocket1.Socket.ReceiveText; Memo1.Lines.Add(Command.Strings[0] + ':' +Socket.ReceiveText); |
wenn ich nun senden will dann kommt fehler mit dem listenindex :/
Moderiert von raziel: Delphi-Tags hinzugefügt.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 12:10
Moin!
darkdester hat folgendes geschrieben: | | sourcecode gegeben |
Warum stellst du den Code nicht hier mit Delphi-Tags rein? Dann könnte man wenigstens das Syntaxhighlighting haben, da du deinen Code ja schon nicht formatierst...
darkdester hat folgendes geschrieben: | | was den noch??? |
Am besten den DFM-Inhalt als Text, oder das ganze Projekt, da du ja auch schlauerweise deinen Controls keine aussagekräftigen Namen gibst, kann das doch keiner lesen...
darkdester hat folgendes geschrieben: | also add.command(edit3.text) ja?
so
zum empfangen
Delphi-Quelltext 1: 2:
| Command.CommaText:=ClientSocket1.Socket.ReceiveText; Memo1.Lines.Add(Command.Strings[0] + ':' +Socket.ReceiveText); |
wenn ich nun senden will dann kommt fehler mit dem listenindex :/ |
Zunächstmal: du mußt natürlich auch Command.Strings[] verwenden, du hast doch .RecieveText bereits aufgerufen, dann ist alles schon in Command drin. Ausserden gehört da natürlich noch eine gescheite Parameterprüfung drum rum, kannst ja nicht einfach auf die String-Indices zugreifen, ohne zu wissen, ob´s die überhaupt gibt (könnte ja ein Übertragungsfehler aufgetreten sein und nur ein "halbes" Kommando angekommen sein...)!  Grund für die von dir angegebene Fehlermeldung
Was mir beim Drübersehen noch aufgefallen ist: Pack das Command := TStringList.Create; in das FormCreate() und das Command.Free; in das FormDestroy; nebenbei, das .Free fehlt bei dir ganz...  Speicherleck...
Das hab ich aber oben schon geschrieben, mein Beispiel ist kein C&P-Code...  Würdest du jetzt bitte langsam anfangen, auch mal etwas zu denken?  Oder wenigstens über PROTOKOLL mal etwas selbst recherchieren?
//EDIT: Hier ist ein Tutorial zum Thema Protokoll, das alle hier noch offenen Fragen klären sollte. Weiterhin ist hier die Erklärung, warum man besser nicht records versenden sollte.
cu
Narses
Zuletzt bearbeitet von Narses am So 04.06.06 23:43, insgesamt 1-mal bearbeitet
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 12:30
was daran jetzt falsch
gleicher fehler
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: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, Menus, StdCtrls, ScktComp,Shellapi;
type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; about1: TMenuItem; Edit1: TEdit; Memo1: TMemo; Button1: TButton; Button3: TButton; Button4: TButton; Edit2: TEdit; GroupBox1: TGroupBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; RadioButton1: TRadioButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Label6: TLabel; procedure FormActivate(Sender: TObject); procedure about1Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button4Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure N6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public end;
var Form1: TForm1; x:string; Command: TStringList;
implementation uses unit2,unit3; {$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject); begin Edit1.clear; Edit2.Clear; Edit3.Clear; Memo1.Clear; Memo1.Clear; Memo1.Lines.Add('Server Online'); port:=88; ServerSocket1.Port:=port; ServerSocket1.Active := TRUE; Edit4.Text:=InttoStr(port); Form3.RadioButton1.Checked:=true; end;
procedure TForm1.about1Click(Sender: TObject); begin form2.Visible:=true; end;
procedure TForm1.N4Click(Sender: TObject); begin Form1.Close; end;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Radiobutton1.Checked :=TRUE; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ClientSocket1.Active := FALSE; ServerSocket1.Active := FALSE; end;
procedure TForm1.Button4Click(Sender: TObject);
begin if ClientSocket1.Active then ClientSocket1.Socket.SendText(Edit2.Text); Command.Add(Edit3.text); Command.Add(Edit2.Text); if ClientSocket1.Active then ClientSocket1.Socket.SendText(Command.CommaText);
Edit2.Clear; Edit2.setfocus; end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText:=ClientSocket1.Socket.ReceiveText; if (Command.Strings[0] = Edit3.Text) then Memo1.Lines.Add(Command.Strings[0] + ':' + Command.Strings[1]); end;
procedure TForm1.Button1Click(Sender: TObject); begin x:=Edit1.Text; ClientSocket1.Host :=x; end;
procedure TForm1.N2Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.Clear; Memo1.Clear; ClientSocket1.Active := FALSE; Radiobutton1.Checked:=false; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssalt in Shift) and (Key = Ord('S')) then ClientSocket1.Socket.SendText(Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then Memo1.Lines.Add(Edit3.Text+':'+Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then edit2.clear; end;
procedure TForm1.N6Click(Sender: TObject); begin Form3.Visible:=true; end;
procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket1.Port :=port; ClientSocket1.Host :=x; ClientSocket1.Active := TRUE; end;
procedure TForm1.FormCreate(Sender: TObject); begin Command := TStringList.Create; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Command.Free; end;
end. |
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
oben steht auch nur command.add
und dann
Memo1.Lines.Add(Command.Strings[1]+
ich habs doch genauso
wieso funzt nich?
bzw sag einfach wodurch son fehler verursacht wird
vlt kann ich das ja selber zurückvollziehn und beheben :/
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 12:50
Moin!
darkdester hat folgendes geschrieben: | was daran jetzt falsch
gleicher fehler |
Bitte, (letzte Warnung) das hier ist keine in deinen Computer eingebaute, interaktive Hilfefunktion! Würdest du mich bitte wie einen Menschen behandeln
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button4Click(Sender: TObject); begin if ClientSocket1.Active then ClientSocket1.Socket.SendText(Edit2.Text); Command.Add(Edit3.text); Command.Add(Edit2.Text); if ClientSocket1.Active then ClientSocket1.Socket.SendText(Command.CommaText);
Edit2.Clear; Edit2.setfocus; end; |
Du sendest zwei mal.
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 13:00
ja sorry!
ok also
ich hab jetzt den fehler mit 2ma senden berichtigt aber es kommt immer noch der Listindex fehler
kannst du mir bitte sagen woran das liegen könnte? einfahc nur die ursache im groben
vlt kann ich selber fehler finden
nochmal der source
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: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, Menus, StdCtrls, ScktComp,Shellapi;
type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; about1: TMenuItem; Edit1: TEdit; Memo1: TMemo; Button1: TButton; Button3: TButton; Button4: TButton; Edit2: TEdit; GroupBox1: TGroupBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; RadioButton1: TRadioButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Label6: TLabel; procedure FormActivate(Sender: TObject); procedure about1Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button4Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure N6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public end;
var Form1: TForm1; x:string; Command: TStringList;
implementation uses unit2,unit3; {$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject); begin Edit1.clear; Edit2.Clear; Edit3.Clear; Memo1.Clear; Memo1.Clear; Memo1.Lines.Add('Server Online'); port:=88; ServerSocket1.Port:=port; ServerSocket1.Active := TRUE; Edit4.Text:=InttoStr(port); Form3.RadioButton1.Checked:=true; end;
procedure TForm1.about1Click(Sender: TObject); begin form2.Visible:=true; end;
procedure TForm1.N4Click(Sender: TObject); begin Form1.Close; end;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Radiobutton1.Checked :=TRUE; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ClientSocket1.Active := FALSE; ServerSocket1.Active := FALSE; end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Command.Add(Edit3.text); Command.Add(Edit2.Text); if ClientSocket1.Active then ClientSocket1.Socket.SendText(Command.CommaText);
Edit2.Clear; Edit2.setfocus; end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText:=ClientSocket1.Socket.ReceiveText; if (Command.Strings[0] = Edit3.Text) then Memo1.Lines.Add(Command.Strings[0] + ':' + Command.Strings[1]); end;
procedure TForm1.Button1Click(Sender: TObject); begin x:=Edit1.Text; ClientSocket1.Host :=x; end;
procedure TForm1.N2Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.Clear; Memo1.Clear; ClientSocket1.Active := FALSE; Radiobutton1.Checked:=false; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssalt in Shift) and (Key = Ord('S')) then ClientSocket1.Socket.SendText(Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then Memo1.Lines.Add(Edit3.Text+':'+Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then edit2.clear; end;
procedure TForm1.N6Click(Sender: TObject); begin Form3.Visible:=true; end;
procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket1.Port :=port; ClientSocket1.Host :=x; ClientSocket1.Active := TRUE; end;
procedure TForm1.FormCreate(Sender: TObject); begin Command := TStringList.Create; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Command.Free; end;
end. |
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 13:30
Moin!
Delphi-Quelltext
Laut RFC solltest du für eigene Anwendungen Ports oberhalb von 1024 verwenden; Vorschlag: nimm Port 12345 oder so.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button4Click(Sender: TObject); begin Command.Clear; Command.Add(Edit3.text); Command.Add(Edit2.Text); if ClientSocket1.Active then ClientSocket1.Socket.SendText(Command.CommaText); |
Du solltest natürlich immer mit einem "neuen" Befehlsspeicher loslegen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText := Socket.ReceiveText; if (Command.Count >= 2) then begin if (Command.Strings[0] = Edit3.Text) then Memo1.Lines.Add(Command.Strings[0] + ':' + Command.Strings[1]); end else ShowMessage('komisches Kommando: '+Command.CommaText); end; |
Du mußt natürlich in der gleichen Reihenfolge die Befehle auswerten, wie du sie sendest.
//EDIT:
- Port auf 5 Stellen hochgesetzt, ist noch besser.
- Im ServerSocket hast du vom ClientSocket gelesen!
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 13:55
ok danke
so nun kommt kein listerror mehr sondern jetzt funzt der chat nichmehr
wenn ich sende muss mein text 2mal kommen
weil halt 127.0.0.1 zum testen
ging früher immer
is ja auch klar
nun kommts nur 1mal, d.h. er zeigt mein text beim gegenüber nich an
warum das aufeinmal
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 24.09.05 13:56
Moin!
Hab nochwas am Beitrag geändert, EDIT beachten.
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 14:31
- Im ServerSocket hast du vom ClientSocket gelesen!
KORRIGIERT
port is aber eigentlich egal oder? is nur wegen den appz
ich test eh grad nur auf localhost!
aber es funzt einfach nicht mehr
er zeigt meine message nur 1mal an
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: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, Menus, StdCtrls, ScktComp,Shellapi;
type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; about1: TMenuItem; Edit1: TEdit; Memo1: TMemo; Button1: TButton; Button3: TButton; Button4: TButton; Edit2: TEdit; GroupBox1: TGroupBox; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; RadioButton1: TRadioButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Label5: TLabel; Edit4: TEdit; Label6: TLabel; procedure FormActivate(Sender: TObject); procedure about1Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button4Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure N6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public end;
var Form1: TForm1; x:string; Command: TStringList; k:integer;
implementation uses unit2,unit3; {$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject); begin port1:=88; if j=1 then port1:=port2;
Edit1.clear; Edit2.Clear; Edit3.Clear; if j=0 then Memo1.Clear; if j=0 then Memo1.Lines.Add('Server Online'); ServerSocket1.Port:=port1; ServerSocket1.Active := TRUE; Edit4.Text:=InttoStr(port1); Form3.RadioButton1.Checked:=true; end;
procedure TForm1.about1Click(Sender: TObject); begin form2.Visible:=true; end;
procedure TForm1.N4Click(Sender: TObject); begin Form1.Close; end;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Radiobutton1.Checked :=TRUE; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ClientSocket1.Active := FALSE; ServerSocket1.Active := FALSE; end;
procedure TForm1.Button4Click(Sender: TObject);
begin Command.Clear; Command.Add(Edit3.text); Command.Add(Edit2.Text); if ClientSocket1.Active then ClientSocket1.Socket.SendText(Command.CommaText);
Edit2.Clear; Edit2.setfocus; end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText:=Socket.ReceiveText; if (Command.Count >= 2) then begin if (Command.Strings[0] = Edit3.Text) then Memo1.Lines.Add(Command.Strings[0] + ':' + Command.Strings[1]) end else ShowMessage('Fehler: '+Command.CommaText); end;
procedure TForm1.Button1Click(Sender: TObject); begin x:=Edit1.Text; ClientSocket1.Host :=x; end;
procedure TForm1.N2Click(Sender: TObject); begin Edit1.clear; Edit2.clear; Edit3.Clear; Memo1.Clear; ClientSocket1.Active := FALSE; Radiobutton1.Checked:=false; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssalt in Shift) and (Key = Ord('S')) then ClientSocket1.Socket.SendText(Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then Memo1.Lines.Add(Edit3.Text+':'+Edit2.Text); if (ssalt in Shift) and (Key = Ord('S')) then edit2.clear; end;
procedure TForm1.N6Click(Sender: TObject); begin Form3.Visible:=true; end;
procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket1.Port :=port1; ClientSocket1.Host :=x; ClientSocket1.Active := TRUE; if k>1 then Memo1.Lines.Add('Server Online'); end;
procedure TForm1.FormCreate(Sender: TObject); begin Command := TStringList.Create; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Command.Free; end;
end. |
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: Sa 24.09.05 18:34
hab getestet
es kommt keine nachricht mehr an!
was hat ds tolle system jezt gebracht
nix geht mehr
edit:
wenn mir jemand message schickt zeigt er das else an
also messaebox!
was los?
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 25.09.05 03:21
Moin!
Ich hatte dich gebeten, mal etwas auf deine Umgangsformen zu achten; ich bin nicht dein Programmiersklave...  Deshalb ist das mein letztes Posting in diesem Thread, selbst schuld.
darkdester hat folgendes geschrieben: | was hat ds tolle system jezt gebracht
nix geht mehr |
Das liegt natürlich an dem "tollen" System, klar. Und das kann auch gar nicht daran liegen, dass du´s evtl. nicht kapierst...
darkdester hat folgendes geschrieben: | | port is aber eigentlich egal oder? is nur wegen den appz |
Hätte ich mir die Mühe gemacht, etwas dazu zu sagen, wenn es egal wäre? Ports unterhalb 1024 sind laut RFC tabu.
darkdester hat folgendes geschrieben: | | ich test eh grad nur auf localhost! |
Ich glaube nicht, dass du das Programm auf dem selben Rechner mehrfach starten kannst, da du nur einen ServerSocket auf einem PC aufmachen kannst (auf dem gleichen Port). Da dein Code aber immer den Server startet, kann das also nicht gehen.
Ich habe deinen (grausamen) Code mal auf das notwendige zusammengestrichen, um es bei mir laufen lassen zu können. Es funktioniert auch, wenn ich es auf zwei verschiedenen Rechnern laufen lasse:
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: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, Menus, StdCtrls, ScktComp,Shellapi;
const CHAT_PORT = 12345;
type TForm1 = class(TForm) Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; ClientSocket1: TClientSocket; ServerSocket1: TServerSocket; Button3: TButton; Button4: TButton; RadioButton1: TRadioButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button4Click(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public Command: TStringList; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Command := TStringList.Create; Edit1.Clear; Edit2.Clear; Edit3.Clear; ServerSocket1.Port := CHAT_PORT; ServerSocket1.Active := TRUE; Edit4.Text := IntToStr(CHAT_PORT); end;
procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin Radiobutton1.Checked := TRUE; end;
procedure TForm1.Button4Click(Sender: TObject); begin Command.Clear; Command.Add(Edit3.Text); Command.Add(Edit2.Text); if ClientSocket1.Active then begin Memo1.Lines.Add(Edit3.Text+': '+Edit2.Text); ClientSocket1.Socket.SendText(Command.CommaText); end; Edit2.Clear; Edit2.SetFocus; end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText := Socket.ReceiveText; if (Command.Count >= 2) then Memo1.Lines.Add(Command.Strings[0]+': '+Command.Strings[1]) else ShowMessage('Fehler: '+Command.CommaText); end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssalt in Shift) and (Key = Ord('S')) then Button4Click(Self); end;
procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket1.Port := CHAT_PORT; ClientSocket1.Host := Edit1.Text; ClientSocket1.Active := TRUE; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ClientSocket1.Active := FALSE; ServerSocket1.Active := FALSE; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Command.Free; end;
end. |
Entscheidende Änderung ggü. deinem Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Command.CommaText:=Socket.ReceiveText; if (Command.Count >= 2) then begin Memo1.Lines.Add(Command.Strings[0] + ':' + Command.Strings[1]) end else ShowMessage('Fehler: '+Command.CommaText); end; |
Das ist aber nicht die einzige Änderung, vergleich mal meine Version deines Codes mit deiner Letzten, um zu sehen was genau ich geändert habe. Wenn ich schon deinen Code flicke, dann mach du dir mal ruhig die Arbeit, die entsprechenden Stellen rauszusuchen (ich mußte ja auch die Oberfläche "rekonstruieren")...
Nebenbei: dein Ansatz einen Chat zu machen, ist schon eher fragwürdig. Mach mal lieber noch ein paar Tuts durch, damit du etwas besseren Überblick darüber kriegst, was du da eigentlich tust...
So, das war´s für mich; brauchst mich auch nicht weiter mit PNs zu nerven.
cu
Narses
|
|
darkdester 
      
Beiträge: 100
|
Verfasst: So 25.09.05 12:31
ok danke
vlt läufter ja ma irgendwann wieder
achja und
1. das is nur verwirrend weil ich den chat schon über 2-3monate nicht mehr angerührt hatte
2. lief er vorher super, halt das statt nickname nur Ip kam  , wollt ich eben ändern
3. in ner anderen version sogar ne verschlüsselung eingebaut is(keine kopierte!!!)
4. ich bestimmt 1monate nix mehr in delphi gemacht hatte und nebenbei au ncoh c++ schreiben muss
naja wie au immmer, thx nochmal
mfg darkdester
|
|
|