Entwickler-Ecke

Internet / Netzwerk - Brauche Hilfe zu Konsolenanwendung mit serversocket


Delete - Sa 01.04.06 20:05
Titel: Brauche Hilfe zu Konsolenanwendung mit serversocket
Hallo Leute,
Ich bin grade dabei eine Konsolenanwendung zum chatten zu schreiben,
ein Client der sendet und ein Server der Empfängt.
Der Code des Clients lässt sich compilieren und ausführen.
Der Vom Server auch, allerdings bringt Delphi dann eine Fehlermeldung .
Zitat:

Windows Socket Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert,
da der socket nicht verbunden ist.


Was mache ich falsch ?

Hier der Code vom Client

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:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

var
client:tclientsocket;

begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
client:=tclientsocket.Create(nil);
client.Port:=20000;
client.Address:='192.168.1.46';
client.active:=true;
try
client.open;
client.Socket.SendText('hallo');
finally
client.Free;
end;
readln;
end.[/quote]

Und der Code vom Server

[quote]program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

var
server:tserversocket;
msg:string;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
server:=tserversocket.Create(nil);
server.Port:=20000;
server.active:=true;
try
server.open;
msg:=server.Socket.ReceiveText;
finally
server.Free;
end;
readln;
end.


Moderiert von user profile iconraziel: Quote- durch Delphi-Tags ersetzt.


Marco D. - Sa 01.04.06 21:17


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:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

var
server:tserversocket;
msg:string;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
server:=tserversocket.Create(nil);
server.Port:=20000;
server.active:=true;
try
server.open;
msg:=server.Socket.ReceiveText;
finally
server.Free;
end;
readln;
end.

Warum aktivierst du denn Server zweimal?
Beide Zeilen haben die gleiche Funktion.

Und hast du schon mal geprüft, ob da Client und Server überhaupt verbunden sind?
Wie man das allerdings bei Konsolenanwendungen macht, weiß ich nicht. Ansonsten macht man das mit dem Ereignis OnConnect.
Stimmen die IP und der Port denn?

Ansonsten probiere es mal so:

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:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

var
server:tserversocket;
msg:string;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
server:=tserversocket.Create(nil);
server.Port:=20000;
try
server.open;
msg:=server.Socket.ReceiveText;
except
server.close;
end;
server.free
readln;
end.


Narses - So 02.04.06 11:41

Moin!

Was du da vorhast, ist nicht ganz so einfach, denn die Socket-Komponenten laufen in einer Konsolenanwendung nur mit Tricks! (Hintergrund: Ereignisverarbeitung über das Application-Objekt!) Wenn du damit keine Erfahrung hast, rate ich dir dringend davon ab, das mit den Sockets zu versuchen. :|

Weiterhin: Dein Ansatz sieht mir eher so aus, als hättest du auch sonst mit den Sockets noch nicht ganz so viel gemacht... ;) (ist keine Kritik, jeder hat mal angefangen)

Deshalb wäre meine Empfehlung: Versuch dich erstmal an einer GUI-Anwendung, das ist erheblich einfacher! :D Du könntest zum Beispiel mit diesem Tutorial [http://www.delphi-library.de/topic_ProtokollChatTutorial+TServerClientSocket++V201_54269.html] einsteigen. ;)

cu
Narses