[ Milos Sreckovic @ 30.08.2006. 16:58 ] @

Napravio sam mali deamon koji na serveru sve sto treba da radi je prihvati konekciju i primi poruku i to izvrsi(poziva funkciju system() i izvrsava to sto je poslati) znaci nema nikakvog logovanja ni nista, samo prvu poruku koju dobije, on izvrsi...

koristim komponentu idtcpclient u delphiju da posaljem tu komandu, ali problem nastaje kad hocu da posaljem dve komande...
Na serveru stavim da cita dve zaredom i da kako koju procita, on izvrsi... u clientu kazem da posalje dve zaredom, ali kad posalje jednu, on je izvrsi, a kod druge zakuca...

ovo je napisano u delphiju
Code:

IdTCPClient1.Connect;
IdTCPClient1.SendCmd('echo labud');

port i IP sam namestio pre pokretanja programa

a source servera cu uplodovati
[ qwertzuiopasdfghjkl @ 31.08.2006. 08:45 ] @
Ja se sjecam da je mene Indy 10 dobrano zezao, tako da sam presao na Indy 9!!

Ako vec znas unaprijed koji su nazivi komandi onda:
-postavi IdTCPServer na formu i klikni na njega, zatim odi u Object Inspector i klikni na '...' kod CommandHandlers.. nakon toga klikni na onu slicicu (Add new [Ins]) i onda klikni na taj 0-TIdCommandHandler0 te u polje komand u object inspectoru ukucaj 'komanda1' (bez navodnika ;) ) i onda klikni na Events i u OnCommand event obradjuj sta oces.. znaci kad server dobije komandu (string) od klijenta 'komanda1' izvrsit ce ti se kod u onom OnCommand eventu!!

Ako ne znas koje komande mogu bit onda koristi ReadLn.. ne sjecam se da sam to nasao u Indy10, zato vise volim Indy9:
var s:string;
s:=ASender.Thread.Connection.ReadLn;

Imas u attachu neki matori moj program koji sam bio radio!!


ps:il koristi winsock..
[ Milos Sreckovic @ 31.08.2006. 09:12 ] @
ma server je napisan u C++ u linuxu i vrti se na serveru. Problem je kod klijenta!!(bar mislim jer test klijen isto u C++ isto pod linuxom radi normalno)
[ qwertzuiopasdfghjkl @ 31.08.2006. 11:45 ] @
A.. zeznuo sam se :)

Zasto to onda ne iskucas u winsocku na winu (ako vec mora bit na win-u)...??
Nakacis se na server i samo sendbuf(msocket,buf,sizeof(buf),0);

I zasto umjesto:
Code:

int daizvrsi(char *a)
{
    if (
    (a[0]=='s')&&
    (a[1]=='y')&&
    (a[2]=='s')&&
    (a[3]=='t')&&
    (a[4]=='e')&&
    (a[5]=='m')) return 1;
    else return 0;    
}


jednostavno ne napravis if(strcmp(a,"system")==0) return 1!?
[ qwertzuiopasdfghjkl @ 31.08.2006. 11:52 ] @
Evo kako bi islo to u delphiu:
Code:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, WinSock;

var
  wsa_Data: WSADATA;
  serverService: sockaddr_in;
  m_socket: Integer;
  zahtjev: String;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  WSAStartup(MAKEWORD(2,2), wsa_Data);
  m_socket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  serverService.sin_family:=AF_INET;
  serverService.sin_addr.s_addr:=inet_addr('127.0.0.1');  //adresa servera
  serverService.sin_port:=htons(1111);  //port na kojem je server

    if (connect(m_socket, serverService, sizeof(serverService)) = SOCKET_ERROR) then
    WriteLn('Problem');

zahtjev:='komanda1';
send(m_socket,zahtjev[1],Length(zahtjev),0);

zahtjev:='komanda2';
send(m_socket,zahtjev[1],Length(zahtjev),0);


  ReadLn;
  WSACleanup;
end.


Mozda ima koja greska u kodu... tu sam ga bio mjenjao/pisao!