yo... ich code momentan an einem filesharing tool, das auch super klappen würde, wenn es nicht Router, Firewalls usw. geben würde.
Das Prinzip ist so aufgebaut:
Der Client sendet eine Suche an den Server...
if not conn.Active then
statictext1.caption := 'You are not connected !'
else
begin
statictext1.caption := 'Sendin'' Search.....';
sprog.Decoded := '@search;'+sphrase.text+';'+stype.items[stype.itemindex];
conn.Socket.SendText(sprog.encoded);
end;
Sobald der Server die Daten empfangen hat, formatiert er sie, und sendet sie an alle clients.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
max, b: Integer;
txt: String;
tmp: String;
begin
sprog.Encoded := Socket.ReceiveText;
txt := sprog.decoded;
cmd.lines.add('cmd] '+txt);
cmd.lines.add('');
max := ServerSocket1.Socket.ActiveConnections - 1;
for b:=0 to max do
ServerSocket1.Socket.Connections[b].SendText(Socket.RemoteAddress + '@' + txt);
end;
Die Clients, überprüfen, ob sie ein file haben, das eventuell, auf die suche passt, und sendet die formatierten daten (also all files, die ip des suchers usw) und sendet sie zurück an den Server.
Der guckt welche IP im string steht, und sollte es dann zurück an die IP senden.
Das klappt aber halt net, weil der (Router oda Firewall) Client, keine sachen von aussen, direkt empfangen kann.
Ich hoffe jemand hat ne Lösung :)