Hallo,
ich habe ein aus der Schule programmiertes Nimmspiel um eine Netzwerkfunktion erweitert. Es funktioniert auch einigermaßen. Das Problem ist folgendes: Öfters bekomme ihc eine selbstprogrammierte Fehlermeldung, die nach einer Except Anweisung steht. Aßerdem stürzt das Programm jedesmal ab, wenn ich eine TCP Verbindung aufgebaut hab und es danach beende. Also irgendeinException Error.
Hier der Code vom TCP Server
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:
| procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); VAR msg:string; neu, zahl:integer; begin IF verbundengast=false THEN begin IF Athread.Connection.ReadLn='IASKYOU' THEN begin form7.Label4.Visible:=true; verbundengast:=true; end end ELSE IF verbundengast=true THEN begin IF netzwerkspiel=false THEN begin TRY neu:=AThread.Connection.ReadInteger(true); msg:=AThread.Connection.ReadString(neu); CASE msg[1] OF '2':Begin form2.RadioButton1.Checked:=false; form2.RadioButton2.Checked:=true; end; 'A':Begin form2.RadioButton2.Checked:=false; form2.RadioButton1.Checked:=true; end; 'G':Begin form7.CheckBox1.Checked:=true; form7.CheckBox1.Enabled:=false; netzwerkspiel:=true; end; 'H':Begin form7.CheckBox1.Checked:=false; form7.CheckBox1.Enabled:=false; netzwerkspiel:=true; end; 'N':Begin delete(msg,1,1); form7.Label4.Caption:=msg + ' hat sich connectet'; form3.GroupBox2.Caption:=' ' + msg + ' '; form3.GroupBox6.Caption:=' ' + msg + ' '; end; 'X':Begin delete(msg,1,1); form2.Edit2.Text:=msg; end; end; EXCEPT messagedlg('Es ist ein Fehler während der Spielinformationsübertragung aufgetreten', mtError, [mbOK], 0); end; end ELSE IF netzwerkspiel=true THEN Begin TRY neu:=AThread.Connection.ReadInteger(true); msg:=AThread.Connection.ReadString(neu); CASE msg[1] OF 'D':Begin IF form2.RadioButton1.Checked THEN form3.BitBtn1.Enabled:=false ELSE form3.BitBtn1.Enabled:=true; end; 'B':BEGIN form1.tcpb; saubermachen; end; 'K':tcpk(msg); 'M':Begin delete(msg,1,1); messagedlg(msg, mtInformation, [mbOK], 0); end; end EXCEPT messagedlg('Es ist ein Fehler während der Datenübertragung aufgetreten', mtError, [mbOK], 0); end; end; end; end;
procedure TForm1.tcpb; Begin oben.netzwerkspiel:=false; oben.verbundengast:=false; form7.Label4.Visible:=false; form2.GroupBox2.Enabled:=true; form2.GroupBox3.Enabled:=true; form7.CheckBox1.Enabled:=true; form2.Edit1.Enabled:=true; form2.Edit2.Enabled:=true; showmessage('Ihr Mitspieler hat sich getrennt'); end;
procedure tcpk(msg :String); Begin delete(msg,1,1); form3.Label13.Caption:=InttoStr(StrtoInt(form3.Label1.Caption) - StrtoInt(msg)); form3.Label14.Caption:=InttoStr(StrtoInt(form3.label13.caption) + Strtoint(form3.Label14.Caption)); form3.Label1.Caption:=msg; form3.Label15.Caption:=InttoStr(StrtoInt(form3.label15.caption) + 1); IF spielfeld.jt = true THEN spielfeld.winner(2) ELSE form3.BitBtn1.Enabled:=true; end; |
Hier der vom Client (Auszug)
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:
| procedure TForm1.verbinden; begin form1.idTCPclient1.Disconnect; form1.idTCPclient1.Connect; end;
procedure TForm1.writeint(s :char); begin form1.IdTCPClient1.WriteInteger(1); form1.idTCPclient1.Write(s); end;
procedure TForm1.tcpsender; begin form1.idTCPclient1.WriteLn('IASKYOU'); verbinden; form1.IdTCPClient1.WriteInteger(length(form2.Edit1.Text) +1); form1.IdTCPClient1.Write('N' + form2.Edit1.Text); IF form7.CheckBox1.Checked=true THEN begin form1.IdTCPClient1.WriteInteger(length(form2.Edit2.Text) +1); form1.IdTCPClient1.Write('X' + form2.Edit2.Text); IF form2.RadioButton1.Checked THEN writeint('2') ELSE writeint('A'); writeint('H'); verbinden; end ELSE writeint('G'); verbinden; end; |
Für Hilfe wäre ich wirklichsehr dankbar