Thema: Delphi Socket-Fehler #10054

Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Socket-Fehler #10054

  Alt 10. Sep 2007, 09:29
Ich bekomme, wenn ich eine Nachricht an eine Ip sende einen Socketfehler #10054, obwohl keine der beiden Seiten die Verbindung trennt.

Ich benutze die UdpSockUtil-Komponente, wessen Demo problemlos funktioniert.
Meine Frage ist nun, welchen Code ihr braucht um zu sagen, was ich falsch mache.
Delphi-Quellcode:
procedure TfrmMain.Send(AType: TMessageType; ARecipient: string; AIndex : Integer);
var
  Data : array of Byte;
  msg : TMessageData;
  i: Integer;
  kill : string;
  messageOkay : Boolean;
begin
  SetLength(Data, REQUEST_HEADER_LENGTH);
  messageOkay := true;
  case AType of
    mtShutDown: begin
      Data[0] := 1;
    end;
    mtLogOut: begin
      Data[0] := 2;
    end;
    mtDelete: begin
      Data[0] := 3;
    end;
    mtMessage: begin
      if frmDialog.Execute = mrOk then
      begin
        msg := frmDialog.GetMessageData;
        // Laenge der Nachricht erstellen
        // Es müssen zusätzlich noch 3 addiert werden, da es 2 Trenner gibt und ein Iconindex
        SetLength(Data, Length(msg.title + msg.text) + 3 + REQUEST_HEADER_LENGTH);
        Data[0] := 4;
        for i := 1 to Length(msg.title) do
          Data[i + REQUEST_HEADER_LENGTH - 1] := Ord(msg.title[i]);
        Data[Length(msg.title) + REQUEST_HEADER_LENGTH] := 0;
        for i := 1 to Length(msg.text) do
          Data[Length(msg.title) + i + REQUEST_HEADER_LENGTH] := Ord(msg.text[i]);
        Data[Length(msg.title + msg.text) + 2 + REQUEST_HEADER_LENGTH] := 0;
        Data[High(Data)] := msg.icon;
      end else
        messageOkay := false;
    end;
    mtKill: begin
      kill := 'IcyTower';

      if InputQuery('Kill', 'Bitte geben sie den Titel des Programms an, der beendet werden soll.', kill) then
      begin
        // Laenge der Nachricht erstellen
        SetLength(Data, Length(kill) + REQUEST_HEADER_LENGTH);
        Data[0] := 5;
        for i := 1 to Length(kill) do
          Data[i + REQUEST_HEADER_LENGTH - 1] := Ord(kill[i]);
      end else
        messageOkay := false;
    end;
  end;
  if messageOkay then
  begin
    if ARecipient = 'r50then
    begin
      for i := 0 to High(R50_NAMES) do
      begin
        udpSocket.RemoteHost := R50_NAMES[i];
        udpSocket.SendBuf(Data[0], Length(Data));
      end;
    end else if ARecipient = 'foyerthen
    begin
      for i := 0 to High(R50_NAMES) do
      begin
        udpSocket.RemoteHost := 'Foyer' + IntToStr(i);
        udpSocket.SendBuf(Data[0], Length(Data));
      end;
    end else
    begin
      udpSocket.RemoteHost := ARecipient;
      udpSocket.SendBuf(Data[0], Length(Data));
    end;
  end;
end;
Das ist der Code, welche die Nachricht sendet.
ARecipent ist "192.168.1.191" (Ping erfolgreich), AType ist entweder 1 oder 2 (beides geht nicht)...
Dies tritt auch mit den anderen PCs auf.

Ich kommuniziere dabei über Prot 2007 zu einen Service.

Könnt ihr mir sagen was ich falsch mache xD

Kann es auch sein, dass ich den anderen Computer (also der mit den Service) herunterfahren/abmelden will?
(Naja ist Windows 2000... da funktioniert das nicht so ganz)

MfG
xZise

PS: Wenn ich eine Nachricht übertrage funktioniert es seltsamerweise

PPS: Wäre freundlich, wenn es jemand bis 11:10 sieht ^^ dann ist die Freistunde vorbei xD
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat