mmh, hört sich erstmal nach genau dem an, was ich suche. Nur hab ich keinen Schimmer wie ich das mache und in der Delphi-Hilfe wird anscheinend vorrausgesetzt das man weiss, was ein "handle" überhaupt ist...
Kann mir jeman das bitte anhand von Quelltext zeigen (Thx)?
Ach und hier noch das halbfertige Program. Sinn ist es, das alle connecteten Clients eine Zufallszahl zum Server schicken, der die vergleicht und ermittelt wer der Sieger ist. Bei der Ermittlung des Siegers scheint es das Problemm zu geben, das ServerSocket1.Socket.Connection[i].RemoteAdresss hier im Netzwerk immer 127.0.0.1 ist.
Ich poste erstmal alles. Zuerst den Client:
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:
| procedure TForm1.Create(Sender: TObject); begin ClientSocket1.Port:=MY_PORT; Log.Lines[0]:= 'Welcome'; end;
procedure TForm1.OnlineClick(Sender: TObject); begin if Online.Checked then ClientSocket1.Host:=ServerAddress.Text; ClientSocket1.Active:=Online.Checked; end;
procedure TForm1.ClientSocket1_WhenConnected(Sender: TObject; Socket: TCustomWinSocket); begin Log.lines.Add('Verbindung zu '+ ClientSocket1.Host+' hergestellt') end;
procedure TForm1.BsubmitClick(Sender: TObject); var num : integer; begin randomize; num:=random(100)+1; Clientsocket1.Socket.SendText(inttostr(num)); end;
procedure TForm1.ClientSocket1_Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if ClientSocket1.Active then Online.Checked := FALSE; Log.Lines.Add('Fehler '+ inttostr(ErrorCode)) end;
procedure TForm1.FormDestroy(Sender: TObject); begin if ClientSocket1.Active then Clientsocket1.close; end;
procedure TForm1.ClientSocket1_RecieveData(Sender: TObject; Socket: TCustomWinSocket); begin Log.Lines.Add(Socket.ReceiveText); end; |
Und hier den 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:
| procedure TForm1.Form1_Create(Sender: TObject); begin ServerSocket1.Port := MY_PORT; Log.Lines[0]:= 'Welcome'; gamer:=0; end;
procedure TForm1.OnlineClick(Sender: TObject); begin if online.Checked then Log.Lines.Add('Allet Online'); ServerSocket1.Active := Online.Checked; end;
procedure TForm1.ServerSocket1_Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Log.Lines.Add('Fehler'+ inttostr(Errorcode));
if ServerSocket1.Active then Online.Checked := FALSE; end;
procedure TForm1.ServerSocket1_ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Socket.SendText('Welcome at '+ Serversocket1.Socket.LocalHost); Socket.SendText('You are player '+ inttostr(Serversocket1.Socket.ActiveConnections-1)); end;
procedure TForm1.ServerSocket1_ClientRead(Sender: TObject; Socket: TCustomWinSocket); var i, winner : integer; bstring : string; begin
For i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin if Socket.RemoteHost = ServerSocket1.Socket.Connections[i].RemoteHost then begin RecievedNums[i]:=Strtoint(Socket.ReceiveText); Broadcast('Server', ServerSocket1.Socket.Connections[winner].RemoteHost +' schickt eine '+ inttostr(RecievedNums[i]) +' ins Rennen....'); inc(gamer); break end; end;
if gamer = ServerSocket1.Socket.ActiveConnections then begin winner:=Sortieren; ServerSocket1.Socket.Connections[winner].SendText('Du Jewinna von Deutschkurs mit '+ inttostr(Recievednums[winner])); broadcast('Server','Der Gewinner ist: '+ ServerSocket1.Socket.Connections[winner].RemoteHost +' mit '+ inttostr(RecievedNums[Winner]) +' Pkt!'); gamer:=0; end;
end;
function TForm1.Sortieren : integer; var hoechste, i, h : integer; begin hoechste:=0; for i:=1 to gamer-1 do if RecievedNums[i] < RecievedNums[i+1] then hoechste:=i+1;
result:=hoechste; end;
procedure TForm1.Broadcast (const Name, Text: String); var i: integer; begin for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do ServerSocket1.Socket.Connections[i].SendText(Name +': '+ Text); end; |
Nochmal Danke
