| Autor |
Beitrag |
Jaegermeister1992
Hält's aus hier
Beiträge: 10
|
Verfasst: Fr 25.09.09 21:43
Hallo,
also ich habe 2 Programme geschrieben einen Clienten und einen Server! Der Server ist Dafür da das dort Sich Leute über den Clienten einloggen sozusagen. und beim einloggen wird die IP des Clienten an den Server geleitet und dann Dort als Client.Host := IP eingetragen blos sobald ich das ausführe kommt eine Fehlermeldung udn zwar:
| Zitat: | | Windows Socket Fehler: Der Angeforderte Name ist gültig, Es wurden jedoch keine Daten des Angeforderten Types gefunden(11004), auf API 'Async Lookup' |
Der Teil WinSock ist nur dafür zuständig um die Ip des PCs herauszufinden! Ich weiß das es einfacher geht aber in Delphi 7 Personal Edition gibts diese Komponenten Leider nicht!
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, Winsock;
type TForm1 = class(TForm) Feld: TMemo; Text: TEdit; Senden: TButton; Server: TServerSocket; Client: TClientSocket; Ip: TEdit; Verbinden: TButton; Name: TEdit; Start: TButton; Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure VerbindenClick(Sender: TObject); procedure SendenClick(Sender: TObject); procedure StartClick(Sender: TObject); procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); private public end;
var Form1: TForm1; sIP : String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); resourcestring
cTxtIP = '%d.%d.%d.%d';
var
rSockVer : WordRec;
aWSAData : TWSAData;
szHostName : array[0..255] of Char;
pHE : PHostEnt;
begin
rSockVer.Hi := 1;
rSockVer.Lo := 1;
WSAStartup(Word(rSockVer), aWSAData );
try
FillChar(szHostName, SizeOf(szHostName), #0);
GetHostName(szHostName, SizeOf(szHostName));
pHE := GetHostByName(szHostName);
if Assigned(pHE)
then with pHE^ do
sIP := Format(cTxtIP,
[Byte(h_addr^[0]), Byte(h_addr^[1]),
Byte(h_addr^[2]), Byte(h_addr^[3])]);
finally
WSACleanup;
end;
ShowMessage(sIP);
Server := TServerSocket.Create(Form1); Client := TClientSocket.Create(Form1); Server.OnClientRead := ServerClientRead; try Server.Port := 10024; Server.Open;
except Client.Free; Server.Free; end; end;
procedure TForm1.VerbindenClick(Sender: TObject); begin Client.Host:= IP.Text; Client.Port := 10024; Client.Open; end;
procedure TForm1.SendenClick(Sender: TObject); begin Feld.Lines.Add(Text.Text); Client.Socket.SendText(Text.Text); Text.Text := ''; end;
procedure TForm1.StartClick(Sender: TObject); begin Feld.Lines.Add(Name.Text + ' ist online!'); Start.Enabled:= false; Client.Socket.SendText('IP - ' + sIP); end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var MSG: String; begin MSG := Socket.ReceiveText;
Feld.Lines.Add(MSG); end; end. |
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls;
type TForm1 = class(TForm) Feld: TMemo; Text: TEdit; Button1: TButton; Server: TServerSocket; Client: TClientSocket; Client2: TClientSocket; procedure Button1Click(Sender: TObject); procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; Spieler : real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Feld.Lines.Add(Text.Text); Client2.Socket.SendText(Text.Text); end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var MSG: String; Ip : string; begin MSG := Socket.ReceiveText; Ip := copy(MSG, 1, 5); if Ip = 'IP - ' then begin IP := Copy(MSG, 5,15); if Spieler = 1 then begin Showmessage(IP); Spieler := 2; Client2.Host:= IP; CLient2.Port := 10024; Client2.Open; Showmessage(Client2.Host); end end else Feld.Lines.Add(MSG); end;
procedure TForm1.FormCreate(Sender: TObject); begin Spieler:=1; Server := TServerSocket.Create(Form1); Client := TClientSocket.Create(Form1); Client2 := TClientSocket.Create(Form1); Server.OnClientRead := ServerClientRead; try Server.Port := 10024; Server.Open; Client.port := 10024; Client.Host := 'localhost'; client.Open;
except Client.Free; Server.Free; end; end;
end. |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 26.09.09 13:05
Moin und  im Forum!
Dein Code sieht sehr nach älteren Tutorials aus, in denen die Socket-Komponenten leider überhaupt nicht designgerecht eingesetzt werden, manchmal sogar klar fehlerhaft eingebunden sind.  Es sieht auch sehr merkwürdig aus, dass du im Server und im Client jeweils beide Komponenten einsetzt. Wozu? Man kann eine TCP-Verbindung in beiden Richtungen verwenden.
Jaegermeister1992 hat folgendes geschrieben : | und beim einloggen wird die IP des Clienten an den Server geleitet und dann Dort als Client.Host := IP eingetragen blos sobald ich das ausführe kommt eine Fehlermeldung udn zwar:
| Zitat: | | Windows Socket Fehler: Der Angeforderte Name ist gültig, Es wurden jedoch keine Daten des Angeforderten Types gefunden(11004), auf API 'Async Lookup' |
|
Sieht so aus, als wolltest du den Hostnamen zuweisen, aber das klappt aus irgend einem Grund nicht. Ist auch gar nicht nötig, wie´s aussieht, denn du kannst die bereits bestehende Verbindung benutzen.
Hier gibt´s ein Tutorial dazu.
Jaegermeister1992 hat folgendes geschrieben : | | Der Teil WinSock ist nur dafür zuständig um die Ip des PCs herauszufinden! Ich weiß das es einfacher geht aber in Delphi 7 Personal Edition gibts diese Komponenten Leider nicht! |
Dann schau dir dazu mal diese Unit an.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|