Avatar billede safl Nybegynder
15. juni 2005 - 17:42 Der er 5 kommentarer og
1 løsning

Skrive og læse sockets

Hello!

Jeg har brug for hjælp til sockets!
Jeg skal åbne en socket til en server, sende en tekststreng som serveren så reagerer på og så skal jeg kunne læse svaret.

Den server jeg connecter til er en zabbix_agent hvis det hjælper til at svare :)

Fyrer jeg op for telnet til min server
kan jeg skrive en streng og så snart jeg trykker enter får jeg en streng tilbage og forbindelsen lukker.

Det ser sådan ud:
telnet 192.168.200.252 10050
Trying 192.168.200.252...
Connected to 192.168.200.252.
Escape character is '^]'.
memory[free]
4071424.000000Connection closed by foreign host.

Hvor "memory[free]" er den streng jeg sender og 4071424.000000 er dem streng jeg modtager.

Det skal jeg så have automatiseret. Nogle der kan fortælle mig hvordan dette gøres? Har ikke leget med sockets før.

mvh Simon
Avatar billede kroning Nybegynder
15. juni 2005 - 20:14 #1
Har du kiket på Indy komponenterne. (TIdTCPClient)
Avatar billede safl Nybegynder
15. juni 2005 - 23:09 #2
Jep men kan ikke få den til at sende og modtage. Kunne godt bruge noget information på området. Det er jo en rimelig simpel operation. Ikke noget med at jeg skal opfinde noget nyt eller lave det helt store client/server setup.
Jeg skal bare sende en streng og kunne læse svaret.
Avatar billede tolderlund Nybegynder
16. juni 2005 - 12:15 #3
Totalt uprøvet, men måske noget i stil med dette:

const
  TimeOut = 30000;
var
  Response: string;
begin
  IdTCPClient.Host := '192.168.200.252';
  IdTCPClient.Port := 10050;
  IdTCPClient.Connect(TimeOut);
  if IdTCPClient.Connected then
  begin
    Response := IdTCPClient.ReadLn(#$0D#$0A, TimeOut, -1);
    IdTCPClient.WriteLn('memory[free]');
    Response := IdTCPClient.ReadLn(#$0D#$0A, TimeOut, -1);
    IdTCPClient.Disconnect;
  end;
end;

Du bliver nødt til at eksperimentere lidt med koden og det afhænger nok også lidt af den Indy version du bruger.
Avatar billede safl Nybegynder
20. juni 2005 - 00:31 #4
Hmm får bare en "Connection closed gracefully"
Avatar billede safl Nybegynder
20. juni 2005 - 00:40 #5
Hmm efter lidt prøvelser, det ser ud til at den godt kan connecte (har lavet en lige timer der tjekker "connected" boolean. Og det virker også som om den kan sende en streng afsted. Men så snart jeg siger:

Response := IdTCPClient.ReadLn(#$0D#$0A, TimeOut, -1);

Får jeg fejlen:
Socket error #10053 Software caused connection abort.
Avatar billede tolderlund Nybegynder
20. juni 2005 - 12:36 #6
Som sagt det er uprøvet.
Det betyder at du skal prøve at variere på tingene for at se hvad der virker og ikke gør.
Prøv at ændre timeout, at skrive #$0D eller #$0A i stedet.
Det er lidt svært at sige hvad problemet er når jeg ikke ved hvad en zabbix_agent er for en tingest.
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

IT-JOB

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Capgemini Danmark A/S

Open Application (Denmark)

Styrelsen for Grøn Arealomlægning og Vandmiljø

Teamleder til Application Management

Zealand Business College

Faglig teamleder til IT Drift & Support