kostenloser Webspace werbefrei: lima-city


Delphi und Net Send

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    Hallo,
    ich habe zwei computer mit einem WLAN Netzwerk vernetzt, ich kann zwar mit der Eingeabeaufforderung Nachrichten an den anderen PC senden, will es aber Benutzerfreundlicher haben. Gibt es in Delphi eine m?glichkeit Nachrichten an andere Computer zu senden? Wenn ja, wie? Achja, man soll vorher in einem Edit den Text eingeben k?nnen...




  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 0******a

    Das geht relativ einfach, indem du die Funktion NetMessageBufferSend aus der Netapi32.dll (im Verzeichnis %SystemRoot%\system32) verwendest.
    Geht allerdings nur, wenn der Arbeitsstationsdienst l?uft (auf beiden Rechnern). Im Zweifelsfall mit den Windows-Bordmitteln mal ausprobieren.

    Nachtrag:
    Da es von der Kommandozeile aus geht, brauchst du da nichts mehr zu ?berpr?fen. Einfach nur die Funktion in dein Programm einbinden.
  4. Hi

    Nat?rlich geht das.

    Die Frage ist nur was du m?chtest.

    Willst du per Net Send die Nachrichten verschicken, oder darf es auch direkt per TCP/IP sein?

    Da gibt es n?mlich so sch?ne Komponenten die nenne sich Indy. Mit denen kannst du also wirklich alles amchen was mit Netzwerk, bzw. Internet zu tun hat.

    Diese L?sung ist halt wesentlich eleganter und hat den Vorteil das man auf allen Windows Systemen die Sache zum laufen bringt.

    Gru? Tobi
  5. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    THX @ 0-Checka, ist zwar f?r mich Delphi-anf?nger ein bisschen unverst?ndlich, aber es gibt ja sowas wie probieren :-) Achja, wie ist eigentlich die Syntax?

    @ttobsen Wie funktioniert das denn?
  6. vercetti schrieb:
    THX @ 0-Checka, ist zwar f?r mich Delphi-anf?nger ein bisschen unverst?ndlich, aber es gibt ja sowas wie probieren :-) Achja, wie ist eigentlich die Syntax?


    Ich bin zwar nicht 0-Checka, aber ich verrats dir trotzdem ;)

    procedure NetMessageBufferSend(die parameter); external 'c:\windows\system32\Netapi32.dll';
    begin
    end;


    So kannst du die DLL einbinden. Meine Methode l?st du per Funktion:

    ShellExecute(Handle, 'open', 'c:\Windows\System32\net.exe', 'send * test', nil, SW_HIDE);

    Musst aber davor ShellApi einbinden!

    Gru? Tobi
  7. s*v

    h? ?? keine ahung und nix mitkomm.. ich w?rds mit net send machen oder unter widows xp mit winchat!

  8. h? ?? keine ahung und nix mitkomm.. ich w?rds mit net send machen oder unter widows xp mit winchat!


    ?ber so Leute wie dich gibts sogar hier nenn eigenen Thread.

    http://www.lima-city.de/boards?mode=thread&id=24974

    Was soll der Post denn? Lie? alles durch bevor du was schreibst und wenn du nichts kapierst dann lass es mit posten!

    Danke

    Gru? Tobi
  9. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    THX @ ttobsen, nur eine Frage, welche parameter m?ssen da denn rein? (Ich hab ne while schleife, da der Benutzer vorher eingeben kann wie oft gesendet werden soll^^ und da soll dann die funktion aufgerufen werden.)
    also so hab ich jetzt die Proceduren(While und Send^^):




    procedure NetMessageBufferSend(an, text); external 'c:\windows\system32\Netapi32.dll';
    begin
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var i, oft: integer;
    text, an: String;
    begin
    oft := StrToInt(wieoft.Text);
    i:=1;
    text := textsend.Text;
    an := anwen.Text;

    while i<=oft DO
    begin
    NetMessageBufferSend(an, text);
    i:=i+1;
    end;
    end;


    Und wie funktioniert das direkt ?ber TCP/IP? Das mit ""ShellExecute(Handle, 'open', 'c:\Windows\System32\net.exe', 'send * test', nil, SW_HIDE); "" ?ffnet ja das Windows Net.exe mit den send paramtern, aber ich will ja auch andere Methoden zum senden lernen^^

  10. Kein Plan welche P?arameter da rein m?ssen. Ich hatte da was geelsen in den "MS SDK - Programmiertechniken". Da stand einiges dar?ber drin. Diese Hilfe Datei ist bei Delphi dabei, oder auch bei microsoft.com zu finden (frag mich aber bitte nicht wie).

    Die shellexecute Methode war wie du in deinem ersten Post gefragt hast. W?rde demnach damit funktionieren.

    TCP/IP machste am besten mit den Indy Komponenten. Haste die? Wenn ned installieren: http://www.indyproject.org/download/Files/Indy9.iwp

    Das ganze jetzt schnell zu erkl?ren ist mir einfach zu lang, aber es ist nicht schwer, wenn du ein wenig mit komponenten umgehen kannst. Musst halt immer bedenken das einer das Server Programm braucht und der andere das Clientprorgamm, oder halt alles miteinander verschachteln.

    Unter www.delphi-source.de findest du Tutorials zu dem Thema.

    Gru? Tobi
  11. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    THX @ ttobsen, habs hingekrigt, hab nen chat gemacht, und einen normalen net sender (f?r alerts xD) :biggrin:

    von mir aus kann das hier geclost werden^^

  12. THX @ ttobsen, habs hingekrigt, hab nen chat gemacht, und einen normalen net sender (f?r alerts xD) :biggrin:

    von mir aus kann das hier geclost werden^^


    Hi w?rde ich egrne machen, aber kannst du bitte deine L?sungen und Teilcode hier posten. Dann h?tten andere auch was davon ;)

    Gru? Tobi
  13. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    Hier ein Chat^^ (Nach einem Tutorial nachgemacht, aber selber getippt^^):
    http://vercetti.xardas.lima-city.de/Delphi/
    (Netchat server und client, das mit den alerts muss ich noch packen, werds dann aber mit in den ordner tun, unter alert^^)


    //EDIT: Alert tu ich erst noch nicht rein, wenn man was falsches eingibt kommt gleich eine fette meldung (z.B anstatt Zahl ein Buchstabe) :mad:
  14. EXE Dateien sind VERBOTEN!!!
    achja wie w?rs wenn du einfach intrasent nimmst??
    is viel einfacher ;)
  15. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    Ich habs ja als 7Zip oder so gespeichert....

    //EDIT: Ist mit Iexpress aus winxp gemacht (extrahierbares archiv oder so, da kann man ordner angeben wo hinsoll)

  16. Ich habs ja als 7Zip oder so gespeichert....

    //EDIT: Ist mit Iexpress aus winxp gemacht (extrahierbares archiv oder so, da kann man ordner angeben wo hinsoll)


    Ahh bist du Wahnisnnig! Dateiendung *.exe verboten!

    Cut n Paste doch eifnach wichtige Code Teile hier rein!

    Gru? Tobi
  17. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.

    das sind so viele :slant: , ich kopier mal den ganzen Code dingsda aus delphi hier rein(wirklich alles xD):

    Client:

    unit MainForm;

    interface

    uses
    Windows, Messages, Graphics, Controls, Forms, Dialogs, ToolWin, ComCtrls,
    Menus, Buttons, Spin, SysUtils, Classes, IdBaseComponent,
    IdComponent, IdTCPConnection, IdTCPClient, ExtCtrls, StdCtrls;

    type
    TForm1 = class(TForm)
    Label1: TLabel;
    edUserName: TEdit;
    Label2: TLabel;
    edServer: TEdit;
    Label3: TLabel;
    lbClients: TListBox;
    Label4: TLabel;
    memLines: TMemo;
    Label5: TLabel;
    edMessage: TEdit;
    SpeedButton1: TSpeedButton;
    IdTCPClient1: TIdTCPClient;
    Timer1: TTimer;
    Label6: TLabel;
    sePort: TSpinEdit;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure IdTCPClient1Connected(Sender: TObject);
    procedure edMessageKeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.FormShow(Sender: TObject);
    begin
    width := width + 1;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    Com,
    Msg : String;
    begin
    if not IdTcpClient1.Connected then
    exit;

    Msg := IdTCPClient1.ReadLn('', 5);

    if Msg <> '' then
    if Msg[1] <> '@' then
    begin
    { Not a system command }
    memLines.Lines.Add(Msg);
    end
    else
    begin
    { System command }
    Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
    Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
    if Com = 'CLIENTS' then
    lbClients.Items.CommaText := Msg;
    end;

    end;

    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
    if (edUserName.Text <> '') and
    (edServer.Text <> '') and
    SpeedButton1.Down then
    begin
    IdTCPClient1.Host := edServer.Text;
    IdTCPClient1.Port := sePort.Value;
    if SpeedButton1.Down then
    IdTCPClient1.Connect;
    end
    else
    begin
    if (edUserName.Text = '') or
    (edServer.Text = '') then
    ShowMessage('You must put in a User Name and server name to connect.');
    SpeedButton1.Down := false;
    end;
    end;

    procedure TForm1.IdTCPClient1Connected(Sender: TObject);
    begin
    IdTCPClient1.WriteLn(edUserName.Text);
    end;

    procedure TForm1.edMessageKeyPress(Sender: TObject; var Key: Char);
    begin
    if key = #13 then
    begin
    IdTCPClient1.WriteLn(edMessage.Text);
    edMessage.Text := '';
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    IdTCPClient1.WriteLn('@' + 'CLIENTS:REQUEST');
    end;

    end.


    Server:


    unit MainForm;

    interface

    uses
    Windows, Messages, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls,
    ExtCtrls, ToolWin, ImgList, Spin, Menus, SysUtils, Classes, IdBaseComponent,
    IdComponent, IdTCPServer, IdThreadMgr, IdThreadMgrDefault;

    type
    TSimpleClient = class(TObject)
    DNS,
    Name : String;
    ListLink : Integer;
    Thread : Pointer;
    end;

    TfrmMain = class(TForm)
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Panel2: TPanel;
    lbClients: TListBox;
    PageControl1: TPageControl;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    ImageList1: TImageList;
    Label3: TLabel;
    lblDNS: TLabel;
    tcpServer: TIdTCPServer;
    lblSocketVer: TLabel;
    Label5: TLabel;
    Label4: TLabel;
    seBinding: TSpinEdit;
    IdThreadMgrDefault1: TIdThreadMgrDefault;
    Label6: TLabel;
    Label7: TLabel;
    memEMotes: TMemo;
    Label8: TLabel;
    Label9: TLabel;
    lblClientName: TLabel;
    lblClientDNS: TLabel;
    puMemoMenu: TPopupMenu;
    Savetofile1: TMenuItem;
    Loadfromfile1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    ToolBar1: TToolBar;
    btnServerUp: TToolButton;
    ToolButton1: TToolButton;
    btnKillClient: TToolButton;
    btnClients: TToolButton;
    btnPM: TToolButton;
    Label12: TLabel;
    edSyopName: TEdit;
    Willkommen: TRichEdit;
    procedure btnServerUpClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure seBindingChange(Sender: TObject);
    procedure tcpServerConnect(AThread: TIdPeerThread);
    procedure tcpServerDisconnect(AThread: TIdPeerThread);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Savetofile1Click(Sender: TObject);
    procedure Loadfromfile1Click(Sender: TObject);
    procedure tcpServerExecute(AThread: TIdPeerThread);
    procedure btnClientsClick(Sender: TObject);
    procedure btnPMClick(Sender: TObject);
    procedure btnKillClientClick(Sender: TObject);
    procedure lbClientsClick(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    Clients : TList;
    procedure UpdateBindings;
    procedure UpdateClientList;
    procedure BroadcastMessage( WhoFrom, TheMessage : String );
    end;

    var
    frmMain: TfrmMain;

    implementation

    {$R *.DFM}

    uses
    IdSocketHandle; // This is where the IdSocketHandle class is defined.

    procedure TfrmMain.UpdateBindings;
    var
    Binding : TIdSocketHandle;
    begin
    { Set the TIdTCPServer's port to the chosen value }
    tcpServer.DefaultPort := seBinding.Value;
    { Remove all bindings that currently exist }
    tcpServer.Bindings.Clear;
    { Create a new binding }
    Binding := tcpServer.Bindings.Add;
    { Assign that bindings port to our new port }
    Binding.Port := seBinding.Value;
    end;

    procedure TfrmMain.btnServerUpClick(Sender: TObject);
    begin
    try
    { Check to see if the server is online or offline }
    tcpServer.Active := not tcpServer.Active;
    btnServerUp.Down := tcpServer.Active;
    if btnServerUp.Down then
    begin
    { Server is online }
    btnServerUp.ImageIndex := 1;
    btnServerUp.Hint := 'Shut down server';
    end
    else
    begin
    { Server is offline }
    btnServerUp.ImageIndex := 0;
    btnServerUp.Hint := 'Start up server';
    end;
    { Setup GUI buttons }
    btnClients.Enabled:= btnServerUp.Down;
    seBinding.Enabled := not btnServerUp.Down;
    edSyopName.Enabled:= not btnServerUp.Down;
    except
    { If we have a problem then rest things }
    btnServerUp.Down := false;
    seBinding.Enabled := not btnServerUp.Down;
    btnClients.Enabled:= btnServerUp.Down;
    edSyopName.Enabled:= not btnServerUp.Down;
    end;
    end;

    procedure TfrmMain.FormCreate(Sender: TObject);
    begin
    { Initalize our clients list }
    Clients := TList.Create;
    { Call updatebindings so that the servers bindings are correct }
    UpdateBindings;
    { Get the local DNS entry for this computer }
    lblDNS.Caption := tcpServer.LocalName;
    { Display the current version of indy running on the system }
    lblSocketVer.Caption := tcpServer.Version;
    end;

    procedure TfrmMain.seBindingChange(Sender: TObject);
    begin
    UpdateBindings;
    end;

    procedure TfrmMain.tcpServerConnect(AThread: TIdPeerThread);
    var
    Client : TSimpleClient;
    begin
    { Send a welcome message, and prompt for the users name }
    AThread.Connection.WriteLn('ISD Connection Established...');
    AThread.Connection.WriteLn('Please send valid login sequence...');
    AThread.Connection.WriteLn('Your Name:');
    { Create a client object }
    Client := TSimpleClient.Create;
    { Assign its default values }
    Client.DNS := AThread.Connection.LocalName;
    Client.Name := 'Logging In';
    Client.ListLink := lbClients.Items.Count;
    { Assign the thread to it for ease in finding }
    Client.Thread := AThread;
    { Add to our clients list box }
    lbClients.Items.Add(Client.Name);
    { Assign it to the thread so we can identify it later }
    AThread.Data := Client;
    { Add it to the clients list }
    Clients.Add(Client);
    end;

    procedure TfrmMain.tcpServerDisconnect(AThread: TIdPeerThread);
    var
    Client : TSimpleClient;
    begin
    { Retrieve Client Record from Data pointer }
    Client := Pointer(AThread.Data);
    { Remove Client from the Clients TList }
    Clients.Delete(Client.ListLink);
    { Remove Client from the Clients List Box }
    lbClients.Items.Delete(lbClients.Items.IndexOf(Client.Name));
    BroadcastMessage('System', Client.Name + ' has left the chat.');
    { Free the Client object }
    Client.Free;
    AThread.Data := nil;

    end;

    procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    if (Clients.Count > 0) and
    (tcpServer.Active) then
    begin
    Action := caNone;
    ShowMessage('Can''t close CBServ while server is online.');
    end
    else
    Clients.Free;
    end;

    procedure TfrmMain.Savetofile1Click(Sender: TObject);
    begin
    if not (puMemoMenu.PopupComponent is TMemo) then
    exit;

    if SaveDialog1.Execute then
    begin
    TMemo(puMemoMenu.PopupComponent).Lines.SaveToFile(SaveDialog1.FileName);
    end;
    end;

    procedure TfrmMain.Loadfromfile1Click(Sender: TObject);
    begin
    if not (puMemoMenu.PopupComponent is TMemo) then
    exit;

    if OpenDialog1.Execute then
    begin
    TMemo(puMemoMenu.PopupComponent).Lines.LoadFromFile(OpenDialog1.FileName);
    end;
    end;

    procedure TfrmMain.UpdateClientList;
    var
    Count : Integer;
    begin
    { Loop through all the clients connected to the system and set their names }
    for Count := 0 to lbClients.Items.Count -1 do
    if Count < Clients.Count then
    lbClients.Items.Strings[Count] := TSimpleClient(Clients.Items[Count]).Name;
    end;

    procedure TfrmMain.tcpServerExecute(AThread: TIdPeerThread);
    var
    Client : TSimpleClient;
    Com, // System command
    Msg : String;
    begin
    { Get the text sent from the client }
    Msg := AThread.Connection.ReadLn;
    { Get the clients package info }
    Client := Pointer(AThread.Data);
    { Check to see if the clients name has been assigned yet }
    if Client.Name = 'Logging In' then
    begin
    { if not, assign the name and announce the client }
    Client.Name := Msg;
    UpdateClientList;
    BroadcastMessage('System', Msg + ' has just logged in.');
    AThread.Connection.WriteLn(willkommen.Lines.Text);
    end
    else
    { If name is set, then send the message }
    if Msg[1] <> '@' then
    begin
    { Not a system command }
    BroadcastMessage(Client.Name, Msg);
    end
    else
    begin
    { System command }
    Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
    Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
    if Com = 'CLIENTS' then
    AThread.Connection.WriteLn( '@' + 'clients:' +
    lbClients.Items.CommaText);
    end;
    end;

    procedure TfrmMain.BroadcastMessage( WhoFrom, TheMessage : String );
    var
    Count: Integer;
    List : TList;
    EMote,
    Msg : String;
    begin
    Msg := Trim(TheMessage);

    EMote := Trim(memEMotes.Lines.Values[Msg]);

    if WhoFrom <> 'System' then
    Msg := WhoFrom + ': ' + Msg;

    if EMote <> '' then
    Msg := Format(Trim(EMote), [WhoFrom]);

    List := tcpServer.Threads.LockList;
    try
    for Count := 0 to List.Count -1 do
    try
    TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
    except
    TIdPeerThread(List.Items[Count]).Stop;
    end;
    finally
    tcpServer.Threads.UnlockList;
    end;
    end;

    procedure TfrmMain.btnClientsClick(Sender: TObject);
    begin
    UpdateClientList;
    end;

    procedure TfrmMain.btnPMClick(Sender: TObject);
    var
    Msg : String;
    Client : TSimpleClient;
    begin
    Msg := InputBox('Private Message', 'What is the message', '');
    Msg := Trim(Msg);
    Msg := edSyopName.Text + '> ' + Msg;
    if (Msg <> '') and
    (lbClients.ItemIndex <> -1) then
    begin
    Client := Clients.Items[lbClients.ItemIndex];
    TIdPeerThread(Client.Thread).Connection.WriteLn(Msg);
    end;
    end;

    procedure TfrmMain.btnKillClientClick(Sender: TObject);
    var
    Msg : String;
    Client : TSimpleClient;
    begin
    Msg := InputBox('Disconnect message', 'Enter a reason for the disconnect', '');
    Msg := Trim(Msg);
    Msg := edSyopName.Text + '> ' + Msg;
    if (Msg <> '') and
    (lbClients.ItemIndex <> -1) then
    begin
    Client := Clients.Items[lbClients.ItemIndex];
    TIdPeerThread(Client.Thread).Connection.WriteLn(Msg);
    TIdPeerThread(Client.Thread).Connection.Disconnect;
    Clients.Delete(lbClients.ItemIndex);
    lbClients.Items.Delete(lbClients.ItemIndex);
    end;
    end;

    procedure TfrmMain.lbClientsClick(Sender: TObject);
    var
    Client : TSimpleClient;
    begin
    btnPM.Enabled := lbClients.ItemIndex <> -1;
    btnKillClient.Enabled := btnPM.Enabled;

    if lbClients.ItemIndex = -1 then
    exit;
    Client := Clients.Items[lbClients.ItemIndex];
    lblClientName.Caption := Client.Name;
    lblClientDNS.Caption := Client.DNS;
    end;



    end.


    Danke an ein Tutorial bei www.delphi-source.de
  18. ?hm ja XD
    ich hab nen prob mit dem server und clienten :biggrin:
    der client schmirt andauernt ab, nachdem eine verbindung zum server hergestellt wurde!
    also er macht nichts mehr, ich muss ihn dann per alt+f4 oder ?bern taskmanager beenden
  19. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.


    ?hm ja XD
    ich hab nen prob mit dem server und clienten :biggrin:
    der client schmirt andauernt ab, nachdem eine verbindung zum server hergestellt wurde!
    also er macht nichts mehr, ich muss ihn dann per alt+f4 oder ?bern taskmanager beenden


    Bei meinen zwei rechnern funktioniert alles problemlos, vielleicht beim client ne firewall die den Port blockt oder so?^^
  20. das l?uft ?bern gleichen pc...
    ausserdem verzichte ich auf sowas wie firewall (und virenscanner ;))
    wenn ich nen virus krieg hat der viel (sehr viel) zu tun :)
    und dann muss er noch die system partition finden, die liegt auf H: XD
    ich hab win xp falls dus brauchst
    aber der client st?rtz halt komplett ab.. -.-
  21. Autor dieses Themas

    vercetti

    vercetti hat kostenlosen Webspace.


    das l?uft ?bern gleichen pc...
    ausserdem verzichte ich auf sowas wie firewall (und virenscanner ;))
    wenn ich nen virus krieg hat der viel (sehr viel) zu tun :)
    und dann muss er noch die system partition finden, die liegt auf H: XD
    ich hab win xp falls dus brauchst
    aber der client st?rtz halt komplett ab.. -.-


    habs auch mal auf einem computer getestet, der st?rtzt bei mir auch ab, kA woran das liegt, winXP hab ich auch....
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!