Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Procedura recupero ip macchina di esecuzione
Forum - Pascal - Procedura recupero ip macchina di esecuzione

Avatar
giosch (Normal User)
Rookie


Messaggi: 23
Iscritto: 16/03/2011

Segnala al moderatore
Postato alle 9:43
Venerdì, 09/09/2011
La prima parte di un mio progetto riguardate un server e dei client in chat via internet sfruttando synapse ha bisogno di ottenere l'ip locale del pc un una stringa es: xxx.xxx.xxx.xxx
questa mia procedura è abbastanza brutta e grezza, ma non sono riuscito usando i comandi interni della libreria, quindi mi appoggio al sito www.indirizzo-ip.com/ip.php?.txt

Codice sorgente - presumibilmente Delphi

  1. program get_ip;
  2. uses blcksock;
  3. var
  4.     sock: TTCPBlockSocket;
  5.     str:string;
  6.     num,num1:integer;
  7.     ip:string;
  8. function ipmacchina:string;
  9. var
  10.     buffer: String = '';
  11. begin
  12.     sock := TTCPBlockSocket.Create;
  13.  
  14.     sock.Connect('88.149.192.194', '80');
  15.     // Was there an error?
  16.     if sock.LastError <> 0 then
  17.     begin
  18.         writeLn('Could not connect to server.');
  19.         halt(1);
  20.     end;
  21.     // Send a HTTP request
  22.     sock.SendString('GET /ip.php?.txt/ HTTP/1.1'#13#10'Host: www.indirizzo-ip.com'#13#10#13#10);
  23.  
  24.     // Keep looping...
  25.     repeat
  26.         ipmacchina:=buffer;
  27.         buffer := sock.RecvPacket(2000);
  28.     // ...until there's no more data.
  29.     until buffer = '';
  30. end;
  31.  
  32.  
  33. begin
  34.     num1:=1;
  35.     str:=ipmacchina;
  36.     num:=length(str);
  37.     num:=num-16;
  38.     ip:=delete(str,num1,num);
  39.     writeln(ip);
  40.     readln;
  41. end.



il log della compilazione è

get_Ip.pas(38,9) Error: Incompatible types: got "untyped" expected "ShortString"
get_Ip.pas(42) Fatal: There were 1 errors compiling module, stopping


come posso risolvere? cosa ho sbagliato?

Ultima modifica effettuata da giosch il 09/09/2011 alle 9:45
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
3
Down
V
Segnala al moderatore
Postato alle 11:21
Venerdì, 09/09/2011
delete non restituisce nessun risultato. Modifica permanentemente il valore della stringa passata.

Grazie mille, in effetti era veramente un errore banale... - giosch - 10/09/11 08:20
PM
Avatar
Goblin (Member)
Expert


Messaggi: 375
Iscritto: 02/02/2011

Up
3
Down
V
Segnala al moderatore
Postato alle 13:05
Venerdì, 09/09/2011
Per conoscere l'IP della macchina basta sfruttare le uses WinSock,Windows, presenti anche nel dev-pascal, sotto un esempio

Codice sorgente - presumibilmente Delphi

  1. program GetMyIp;
  2. Uses WinSock,Windows;
  3. type
  4.   TNetInfo=Record
  5.              Localhost,
  6.              LocalIP: String;
  7.            End;
  8. Procedure GetLocalNetworkInfo(Var NInfo: TNetInfo);
  9. Var
  10.    wVersionRequested: WORD;
  11.    wsaData      : TWSAData;
  12.    p            : PHostEnt;
  13.    s            : Array[0..128] Of char;
  14. Begin
  15.    wVersionRequested := MAKEWORD(1, 1);
  16.    WSAStartup(wVersionRequested, wsaData);
  17.    GetHostName(@s, 128);
  18.    p := GetHostByName(@s);
  19.    NInfo.LocalHost := p^.h_Name;
  20.    NInfo.LocalIP := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
  21.    WSACleanup;
  22. end;
  23.  
  24. Var oMyInfo:TNetInfo;
  25. begin
  26.   GetLocalNetworkInfo(oMyInfo);
  27.   writeln(oMyInfo.LocalHost);
  28.   writeln(oMyInfo.LocalIP);
  29.   ReadLn;
  30. end.




io conosco molto bene il pascal, anche con qualche libreria aggiuntiva, ma non so usare i sockets e difficilmente riesco a trovare una guida. Comunque io uso lazarus con freepascal. Come librerie è meglio dev-pascal? - giosch - 10/09/11 08:22
Credo che il freepascal sia meglio, io ho usato il dev perchè al momento ho sottomano solo questo, di solito uso il pascal di delphi. - Goblin - 10/09/11 15:50


Ibis redibis non morieris in bello
PM
Avatar
djleo (Member)
Pro


Messaggi: 72
Iscritto: 07/03/2010

Up
-3
Down
V
Segnala al moderatore
Postato alle 11:21
Venerdì, 09/09/2011
ciao giosch io ti consiglio di usare il c o meglio il c++

Hehe...sono daccordo che fra c o c++ e pascal c'è una bella differenza, ma io del c conosco a stento le if xD e comunque non so ancora programmare ad oggetti ed eventi, quindi c++ sarebbe inutile...nel mio liceo comunque non faremo c, ma java. - giosch - 10/09/11 08:24
PM