Autor Beitrag
soisseteben
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 02.09.06 14:51 
Ich wollte ein Mini-Netzwerkspiel realisieren und steh jetzt vor dem Problem, dass die Eigenschaft "RemoteAddress" sowohl von meinem Rechner als auch von dem anderen im Netzwerk mit 127.0.0.1 angegeben wird. Da wir über einen Router arbeiten müsste der andere Rechner doch aber auch eine IP-Adresse für das Netzwerk haben, die dann in RemoteAddress zu finden sein müsste, oder?

Wenn ich richtig liege, dann ist 127.0.0.1 doch nur die Rechner-interne IP-Adresse?

thx for help
-->Masterkill<--
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24

XP Pro

BeitragVerfasst: Sa 02.09.06 16:36 
Also ja die 127.0.0.1 entspricht der lokalen IP (localhost).
Sonst gib ma etwas code damit ich den zusammenhang verstehen kann.
Mfg masterkill
Minime
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 02.09.06 16:46 
du könntest versuchen die clients durch Socket.Handles zu unterscheiden wenn du das willst/meinst
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 02.09.06 16:59 
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:

ausblenden volle Höhe 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:
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));
  //Log.lines.Add(inttostr(num) +' gesendet');
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:

ausblenden volle Höhe 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:
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           //suchen wer das Datenpacketr geschickt hat
    if Socket.RemoteHost =  ServerSocket1.Socket.Connections[i].RemoteHost then begin        //wenn gefunden
      RecievedNums[i]:=Strtoint(Socket.ReceiveText);                                               //zuordnen
      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   //wenn alle gesetzt haben
    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+1then
      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 :D
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 02.09.06 19:36 
soweit ich das verstanden hab, stellen "Handels" u.a. ID's für Windowsfenster dar. Ich hab allerdings nichts gefunden, das darauf hindeutet, das sich damit die verschiedenen Sockets für die verschiedenen Spieler unterscheiden lassen. :(
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 02.09.06 22:02 
mein code ist sooooo verbugt :autsch: aber das Problem ist gelöst
-->Masterkill<--
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24

XP Pro

BeitragVerfasst: So 03.09.06 13:28 
Wie denn?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 03.09.06 23:31 
Moin!

user profile iconsoisseteben hat folgendes geschrieben:
mein code ist sooooo verbugt :autsch:

Ja, das kann man sicherlich sagen... ;)

user profile iconsoisseteben hat folgendes geschrieben:
aber das Problem ist gelöst

user profile icon-->Masterkill<-- hat folgendes geschrieben:
Wie denn?

Sieht man davon ab, dass es sicher eine gute Idee wäre, hier mal ein Suche in: Delphi-Forum, Delphi-Library PROTOKOLL einzusetzen, dann würde ich sagen, dass hier der "Fehler" liegt:
ausblenden Delphi-Quelltext
1:
2:
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin //suchen wer das Datenpacketr geschickt hat
  if (Socket = ServerSocket1.Socket.Connections[i]) then begin //wenn gefunden

Der TCustomWinSocket ist bereits eine eindeutige Kennung für eine Verbindung, und wenn du es nur innerhalb der Servers verwendest, reicht es aus, einfach die Objektzeiger zu vergleichen. Siehe FAQ-Beitrag. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Mo 04.09.06 08:27 
genau das wars - 'n einfacher Schreibfehler. Mittlerweile läufts auch fehlerfrei. Wegen dem Protokoll - da hab ich versucht in dem Tutorial von dir Narses durchzublicken, was mir jedoch nur sehr eingeschränkt gelang. Aber ich bleib dran.

Auf jeden Fall danke für die Arbeit an dem Tutorial, da konnte man sich auch viel anderes abgucken, worauf man als Noob sicher nicht gekommen wär

bye