Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi AddressViolation bei Socket.SendBuf (https://www.delphipraxis.net/104943-addressviolation-bei-socket-sendbuf.html)

k4ni 13. Dez 2007 00:23


AddressViolation bei Socket.SendBuf
 
Hey,

Ich hab folgendes problem.
Ich habe ein "chat program" von einem TUT-gemacht und da steht das hier drin bei ServerSocket.OnClientConnect

Delphi-Quellcode:
procedure TFrmServer.ServerSocketClientConnect (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TChatNachricht;
    var I: Integer;
begin
  MemStatus.Lines.Add ('Status: Neuer Client verbunden');

  Nachricht.NickName := 'Server';
  Nachricht.Text := 'test';
  Socket.SendBuf (Nachricht, SizeOf(Nachricht));

  with ServerSocket.Socket do begin
    Nachricht.Nickname := 'Server';
    Nachricht.Text := 'Jetzt ' + IntToStr(ActiveConnections) + ' Teilnehmer';
    for I := 0 to ActiveConnections-2 do
      Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
  end; {with}
end;
Geht auch, aber wenn ich da selber etwas senden will per ButtonClick dann gehts aufeinmal nicht, hier der code:

Delphi-Quellcode:
procedure TFrmServer.Button1Click(Sender: TObject);
var
Nachricht: TChatNachricht;
haha: TCustomWinSocket;
begin
  Nachricht.NickName := 'Server';
  Nachricht.Text := 'haha';
  haha.SendBuf(Nachricht, SizeOf(Nachricht));
end;
Wieso geht es oben und hier nicht?

Luckie 13. Dez 2007 00:30

Re: AddressViolation bei Socket.SendBuf
 
Wie sieht die Deklaration von TChatNachricht aus?

k4ni 13. Dez 2007 00:33

Re: AddressViolation bei Socket.SendBuf
 
das ist doch
Delphi-Quellcode:
  Nachricht.NickName := 'Server';
  Nachricht.Text := 'haha';
Oder?


{EDIT]
Au man bin ich doof.
Hier:
Delphi-Quellcode:
type TChatNachricht = Record
        Nickname: string[255];
        Text:    string[255]
      end;
[/EDIT]

sirius 13. Dez 2007 07:47

Re: AddressViolation bei Socket.SendBuf
 
Weil vielleicht "haha" nirgends initialisiert ist. Du kannst doch nicht einfach von irgendwo eine Variable nehmen nur weil sie vom selben Typ ist.

Edit: Im ersten Teil bekommst du über die Parameter einen Zeiger namens "Socket", der tatsächlich auf ein WinSocket zeigt. Im zweiten Quelltext legst du einfach einen Zeiger lokal an, der mal auf ein WinSocket zeigen könnte. Aber du hast ihm ja nirgends einen Wert zugewiesen. Der zeigt einfach zufällig irgendwohin. Die Wahrscheinlichkeit, dass er auf dein WinSocket zeigt liegt bei ca. 1 : 4 Mrd .


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz