Entwickler-Ecke

Internet / Netzwerk - Chat Proggi - Fehlersuche


Doppelhertz - Mo 16.09.02 19:33
Titel: Chat Proggi - Fehlersuche
Das Problem:
Client kann zu Server senden, abba sobald server senden will kommt die Fehlermeldung:
" Win-Socket-Fehler: Eine Anforderung zum Senden oder Empfangen von Daten worde verhindert, da der Socket nicht verbunden ist und (beim Senden über ein Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), auf API 'send'"

Hier der Abschnitt des Quelltextes der für's senden verantwortlich is:

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:
procedure TForm1.sendenbtnClick(Sender: TObject);
         var
Stringlist2: TStrings;
I, H: integer;
begin
   if (Serversocket1.Socket.Connected = false) and (Clientsocket1.Socket.Connected = true) then
      begin

   begin
   Stringlist2 := TStringlist.Create;
   StringList2.LoadFromFile(ExtractFilePath(Application.exeName)+'Einstellungen.ini');
   eigname := StringList2.Strings[0];
   eigtelnummer := StringList2.Strings[1];
   eighandynummer := StringList2.Strings[2];
   sendtext := '<' + eigname + '><';
   for I := 0 to (form1.eingabefeld.Lines.Count - 1) do
      begin
         sendtext := sendtext + ' ' + Eingabefeld.Lines[I];
      end;
   stringlist2.free;
   end;

         ClientSocket1.Socket.SendText(sendtext);
with texte.lines do begin
add (eigname + ':');
//add (eingabefeld.text);
for H := 0 to eingabefeld.lines.count do
   begin
      add ('   ' + eingabefeld.lines[H]);
   end;
eingabefeld.clear;
end;
end;

   if (Serversocket1.Socket.Connected = true) and (Clientsocket1.Socket.Connected = false) then
      begin

   begin
   Stringlist2 := TStringlist.Create;
   StringList2.LoadFromFile(ExtractFilePath(Application.exeName)+'Einstellungen.ini');
   eigname := StringList2.Strings[0];
   eigtelnummer := StringList2.Strings[1];
   eighandynummer := StringList2.Strings[2];
   sendtext := '<' + eigname + '><';
   for I := 0 to (form1.eingabefeld.Lines.Count - 1) do
      begin
         sendtext := sendtext + ' ' + Eingabefeld.Lines[I];
      end;
   //stringlist2.free;
   end;
         ServerSocket1.Socket.SendText(sendtext);
with texte.lines do begin
add (eigname + ':');
add (eingabefeld.text);
eingabefeld.clear;
end;
end;
end;


O'rallY - Di 17.09.02 19:59

1. ersmal habe ich nen Fehler endeckt:

Quelltext
1:
2:
3:
4:
for H := 0 to eingabefeld.lines.count -1 do
  begin
   add ('  ' + eingabefeld.lines[H]);
  end;


Da du das bei der "Clientprozedur" auch schon so gemacht hast, gehe ich mal davon aus, dass das ein Tippfehler war :wink: (das "form1." kannst du übrigens weglassen).


2.
versuch mal:

Quelltext
1:
ServerSocket1.Socket.Connections[0].SendText(sendtext);                    

mit der Eigentschaft Connections kann man alle Verbindungen, die zum Server aufgebaut wurden ansprechen.


Doppelhertz - Mi 18.09.02 21:48

Thx, funzt perfekt. Da wär ich nich so schnell drauf gekommen, da ich mich mit der Client und Serverkomponente nich gut auskenne!


O'rallY - Do 19.09.02 20:23

Ist doch gern geschehen. Freut mich das ich helfen konnte :wink:.