Entwickler-Ecke

Internet / Netzwerk - Server / Client


Chippie82 - Do 11.05.06 21:47
Titel: Server / Client
Hallo Leute, ich habe folgendes Problem ich habe einen Server und einen Clienten erstellt vom Clienten zum Server kann ich einen Text verschicken, wenn ich dies umgekehrt machen möchte, bekomme ich eine Fehlermeldung. Woran liegt das?

Hier der Quelltext:



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:
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:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  ExtCtrls, ScktComp, StdCtrls, ComCtrls; 

type 
  TIP = class(TForm) 
    Label1: TLabel; 
    Label2: TLabel; 
    ClientVerbinden: TButton; 
    ClientTrennen: TButton; 
    ServerVerbinden: TButton; 
    ServerTrennen: TButton; 
    ClientSocket1: TClientSocket; 
    ServerSocket1: TServerSocket; 
    Beenden: TButton; 
    StatusBar1: TStatusBar; 
    ClientSenden: TButton; 
    ServerSenden: TButton; 
    Edit1: TEdit; 
    Edit2: TEdit; 
    Memo1: TMemo; 
    Memo2: TMemo; 
    procedure ClientVerbindenClick(Sender: TObject); 
    procedure ServerVerbindenClick(Sender: TObject); 
    procedure BeendenClick(Sender: TObject); 
    procedure ClientTrennenClick(Sender: TObject); 
    procedure ServerTrennenClick(Sender: TObject); 
    procedure ClientSocket1Disconnect(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; 
      ErrorEvent: TErrorEvent; var ErrorCode: Integer); 
    procedure ClientSocket1Connect(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure ClientSendenClick(Sender: TObject); 
    procedure ServerSocket1ClientRead(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure ServerSendenClick(Sender: TObject); 
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); 

  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end

var 
IP:TIP; 

implementation 

{$R *.DFM} 

procedure TIP.ClientVerbindenClick(Sender: TObject); //Verbindung des Clienten 
begin 
  clientsocket1.active:=true; //Verbindung wird aktiviert 
end

procedure TIP.ServerVerbindenClick(Sender: TObject); //Verbindung des Servers 
begin 
 serversocket1.active:=true; //Verbindung wird aktiviert 
end

procedure TIP.BeendenClick(Sender: TObject); 
begin 
  close; //Programm wird beendet 
end

procedure TIP.ClientTrennenClick(Sender: TObject); 
begin 
  clientsocket1.active:=false; //Client wird getrennt 
end

procedure TIP.ServerTrennenClick(Sender: TObject); 
begin 
  serversocket1.active:=false; //Server wird getrennt 
end

procedure TIP.ClientSocket1Disconnect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  statusbar1.simpletext:='Verbindung wurde getrennt'//Statusanzeige 
end

procedure TIP.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; 
  ErrorEvent: TErrorEvent; 
  var ErrorCode: Integer); 
   begin 
    statusbar1.simpletext:='Error. Verbindung wird getrennt!'//Statusanzeige 
    clientsocket1.Active:=false; //Bei Fehler wird Verbindung getrennt 
  end

procedure TIP.ClientSocket1Connect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  statusbar1.simpletext:='Verbunden'//Statusanzeige 
end


procedure TIP.ClientSendenClick(Sender: TObject); 
begin 
  clientsocket1.socket.sendtext(edit1.text); 
end

procedure TIP.ServerSocket1ClientRead(Sender: TObject; 
  Socket: TCustomWinSocket); 
  var 
  empfang:string
   begin 
    empfang:=socket.receivetext; 
    memo2.lines.add(empfang); 
end

procedure TIP.ServerSendenClick(Sender: TObject); 
begin 
 serversocket1.socket.sendtext(Edit2.text); 
end

procedure TIP.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); 
var 
empfang2:string
  begin 
   empfang2:=socket.receivetext; 
   memo1.lines.add(empfang2); 
end

end.


Ich hoffe ihr könnt mir einen Tip geben oder mir weiterhelfen?


Hier ist noch die Fehlermeldung:

Zitat:

Im Projekt Project1.exe ist eine Exception der Klasse ESocketError aufgetreten. Meldung:
'Windows-Socket-Fehler: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), auf API'send". Prozeß wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen.




Gruß


Chippie


Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 12.05.2006 um 00:01


Fighter#1 - Do 11.05.06 21:56

Wann kommt die Meldung?
Es heißt nicht

Delphi-Quelltext
1:
2:
3:
4:
serversocket1.socket.sendtext(Edit2.text); 
//sondern
ServerSocket1.Socket.Connections[0].SendText(Edit2.Text);
//0 ist der erste Client 1 der zweite, ...


Chippie82 - Do 11.05.06 22:02

Danke, dann klappt es. Also darf ich bei dem Server das Connection[x] nicht vergessen.


Vielen Dank.




Gruß

Chippie


Narses - Do 11.05.06 23:42

Moin!

Wenn ich mir deinen Code so anschaue, dann sieht mir das doch sehr nach einem Chat aus... ;) Allerdings erscheint mir manches recht merkwürdig. :?

Vielleicht hilft dir das hier [http://www.delphi-library.de/topic_ProtokollChatTutorial+TServerClientSocket++V201_54269.html] weiter, wenn du später mal auf Probleme treffen solltest. :D

cu
Narses