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 = 'r50' then
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 = 'foyer' then
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