Avatar billede krab Praktikant
24. november 2001 - 16:05 Der er 2 kommentarer og
1 løsning

Command

Er der nogle der ved hvordan man sender en command over netværk, jeg kan godt finde ud af at sende TEXT,
det ser sådan ud, clientsocket1.Socket.Sendtext(besked); og for at modtage skriver jeg Socket.ReceiveText;
er der nogle der ved hvorfan man sender og modtager comandoer.
Avatar billede martinlind Nybegynder
24. november 2001 - 20:14 #1
Du converterer dine commando\'er til noget teskt og tilbage igen, f.eks. \"run notepad.exe\" og så exec. du notepad.exe på den anden maskine, det er den eneste måde du kan gøre den slags på, der findes ikke nogen std. metode.
Avatar billede dkn Nybegynder
25. november 2001 - 00:23 #2
Man kan ikke sende en command til en server. Du kan kun sende tekst.
Det er ikke så svært når man først lige ved hvordan det gøres.

Normal laver man en protocol over hvordan strengen ser ud når serveren eller klienten modtager den.

Min protocol til dette exempel ser sådan her ud:
100/\\Message/\\    - Giver en normal messagebox på serveren
101/\\Filnavn/\\    - Executer program
102/\\            - Lukker server


Ok først laver lige server delen:

//Put dette code under: ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

var
socktext:string;
ResText : array[0..10] of string;
I:integer;
begin
socktext :=  Socket.ReceiveText; 
for I := 0 to 10 do
begin
ResText[I] := copy(socktext, 1, pos(\'/\\\', socktext)-1);
delete(socktext, 1, pos(\'/\\\', socktext)+1);
end;
//Ok nu er kode nummeret i: ResText[0]
if ResText[0] = \'100\' then
Showmessage(ResText[1]);//Vi ved at teksten som skal vises er i: ResText[1]

if ResText[0] = \'101\' then
Winexec(pchar(ResText[1]), 0);

if ResText[0] = \'102\' then
begin
ServerSocket1.Active := false;
Close;
end;
end;


//Client del:
//Prøv at send een af de følgende ting:

ClientSocket1.Socket.SendText(\'100/\\Hej med dig\');
ClientSocket1.Socket.SendText(\'101/\\C:\\Test.txt/\\\'); //Sørg for at filen er der!
ClientSocket1.Socket.SendText(\'102/\\\');

Ok, i mit eksempel brugte jeg /\\ som spliter, det er meget dumt, for hvis der er et chat felt, og en eller anden skriver \"/\\\" og sender det, kan dit program gå ned.
Brug i stedet et hexdecimal nummer eg: #7. Fordi den kan man ikke skrive ved hjælp af et tastetur.

Håber det hjap en del.
dkn
Avatar billede dkn Nybegynder
25. november 2001 - 00:32 #3
brug ShellExecute istedet for det andet lort...

Uses shellapi;

if ResText[0] = \'101\' then
begin
ShellExecute(Application.Handle, \'open\',PChar(ResText[1]),
nil, nil, SW_SHOW);
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester