Ancora pascal...
dunque...di solito il pascal (o almeno per come lo so usare io) è un programma autonomo...mi spiego...quando metto in esecuzione il programma non interagisce col "mondo esterno" ma legge unicamente ciò che gli viene ordinato sul listato...
ora io ho la necessità di interagire con internet tramite Pascal..
il mio problema è questo..
mettiamo che io debba trovare una pagina così scritta:
www.vecchio123.it
ma che non sappia il numero associato al nome (123)...visto che non posso passare mezza giornata davanti ad IE per provare tutti i numeri consecutivi
www.vecchio1.it
www.vecchio2.it
...
www.vecchio123.it
avevo pensato di realizzare un programma che incrementasse da se' il numero dopo il nome e che si fermasse quando ricevesse da internet segnale positivo...è chiaro il mio problema? è possibile fare qualcosa del genere?
fatemi sapere
saluti
il vecchio
P.S.
se avete altre soluzioni che esulano dal Pascal sono bene accette cmq... [;)]
ora io ho la necessità di interagire con internet tramite Pascal..
il mio problema è questo..
mettiamo che io debba trovare una pagina così scritta:
www.vecchio123.it
ma che non sappia il numero associato al nome (123)...visto che non posso passare mezza giornata davanti ad IE per provare tutti i numeri consecutivi
www.vecchio1.it
www.vecchio2.it
...
www.vecchio123.it
avevo pensato di realizzare un programma che incrementasse da se' il numero dopo il nome e che si fermasse quando ricevesse da internet segnale positivo...è chiaro il mio problema? è possibile fare qualcosa del genere?
fatemi sapere
saluti
il vecchio
P.S.
se avete altre soluzioni che esulano dal Pascal sono bene accette cmq... [;)]

Risposte
per windows speriamo che questo vada bene:
#include
#include
#define PORT 80
int client(char * server_IP);
int InitializeWinsock(WORD );
int main()
{
char string1[30], string2[10];
int n=0, c=0;
for(n=0;n<1000;n++){ //i tentativi si effettuano fino a www.vecchio1000.it
strcpy(string1, "www.vecchio");
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, ".it");
//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);
return 0;
}
int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire
if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);
if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0
if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");
return 1;
}
int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;
err = WSAStartup(wVersionRequested, &wsaData);
if (err!=0) return 0; // Tell the user that we couldn't find a usable winsock.dll
if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;
return 1;
}
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
#include
#include
#define PORT 80
int client(char * server_IP);
int InitializeWinsock(WORD );
int main()
{
char string1[30], string2[10];
int n=0, c=0;
for(n=0;n<1000;n++){ //i tentativi si effettuano fino a www.vecchio1000.it
strcpy(string1, "www.vecchio");
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, ".it");
//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);
return 0;
}
int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire
if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);
if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0
if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");
return 1;
}
int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;
err = WSAStartup(wVersionRequested, &wsaData);
if (err!=0) return 0; // Tell the user that we couldn't find a usable winsock.dll
if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;
return 1;
}
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
ok direi che ci siamo!!! il compilatore non mi dà più errori...a questo punto dovrei dire "run" giusto? perfetto...e i risulti del programma deve li leggo??? quando gli dico "run" lui me lo compila dicendomi che non ci sono errori..e poi mi apre una finestra dal titolo: "compiler and linker output" in cui è scritto questo:
C:\DOCUME~1\...IMPOST~1\Temp\ccMbcaaa.o(.text+0x151):forse.cpp: undefined reference to `WSACleanup@0'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x238):forse.cpp: undefined reference to `socket@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x275):forse.cpp: undefined reference to `inet_addr@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x287):forse.cpp: undefined reference to `htons@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2a2):forse.cpp: undefined reference to `connect@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2bc):forse.cpp: undefined reference to `closesocket@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x308):forse.cpp: undefined reference to `WSAStartup@8'
che devo fare??
C:\DOCUME~1\...IMPOST~1\Temp\ccMbcaaa.o(.text+0x151):forse.cpp: undefined reference to `WSACleanup@0'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x238):forse.cpp: undefined reference to `socket@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x275):forse.cpp: undefined reference to `inet_addr@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x287):forse.cpp: undefined reference to `htons@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2a2):forse.cpp: undefined reference to `connect@12'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x2bc):forse.cpp: undefined reference to `closesocket@4'
C:\DOCUME~1\...\IMPOST~1\Temp\ccMbcaaa.o(.text+0x308):forse.cpp: undefined reference to `WSAStartup@8'
che devo fare??

allora il programma appena riesce a collegarsi a un sito smette di funzionare e ti dice a quale sito si e' collegato, se vuoi che continui a provare tutti i siti e che salvi in un file quelli a cui si e' collegato dimmelo.
questi errori vogliono dire che non trove quelle funzioni, che dovrebbero stare su una libreria esterna. probabilmente questa libreria non c'e' e la devi scaricare. leggendo il link che mi hai riportato tu qualche post fa, vedo:
1.1 Windows e i Sockets
Il progetto Windows Socket iniziò nell'ottobre 1991 in una sessione di Interdrop; venne quindi rilasciata la versione 1.0 in dicembre. E' successivamente seguita la versione 1.1 e l'attuale 2.0. Pur mantenendo le caratteristiche di base della definizione BSD, la specifica WinSock differisce in parecchi punti. I principali argomenti di divergenza sono i seguenti:
[...]
Non è quindi possibile ricompilare un programma UNIX in ambiente Windows senza effettuare una serie di modifiche per renderlo compatibile al nuovo ambiente.
[...]
Vengono riportati alcuni esempi commentati relativi all'impiego di sockets. Gli esempi sono sia per l'ambiente UNIX (con chiamate BSD standard), sia per l'ambiente Windows (Winsock). Per la compilazione degli stessi:
* UNIX: è normalmente sufficiente lanciare il comando gcc source_file.c -o exe_file
* Windows: è necessario creare un progetto (ad esempio con Visual C++), aggiungendo all'elenco delle librerie da linkare al programma la libreria winsock (ad esempio il file wsock32.lib per i sockets versione 1.1)[/br]
penso che tu debba scaricarti i socket versione 2.0 o 1.1 (cioe' ne sono sicuro). il fatto di cui sono un po' meno sicuro e' se tu debba avere o no per forza il compilatore Visual C++
fammi sapere se trovi questi socket
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
questi errori vogliono dire che non trove quelle funzioni, che dovrebbero stare su una libreria esterna. probabilmente questa libreria non c'e' e la devi scaricare. leggendo il link che mi hai riportato tu qualche post fa, vedo:
1.1 Windows e i Sockets
Il progetto Windows Socket iniziò nell'ottobre 1991 in una sessione di Interdrop; venne quindi rilasciata la versione 1.0 in dicembre. E' successivamente seguita la versione 1.1 e l'attuale 2.0. Pur mantenendo le caratteristiche di base della definizione BSD, la specifica WinSock differisce in parecchi punti. I principali argomenti di divergenza sono i seguenti:
[...]
Non è quindi possibile ricompilare un programma UNIX in ambiente Windows senza effettuare una serie di modifiche per renderlo compatibile al nuovo ambiente.
[...]
Vengono riportati alcuni esempi commentati relativi all'impiego di sockets. Gli esempi sono sia per l'ambiente UNIX (con chiamate BSD standard), sia per l'ambiente Windows (Winsock). Per la compilazione degli stessi:
* UNIX: è normalmente sufficiente lanciare il comando gcc source_file.c -o exe_file
* Windows: è necessario creare un progetto (ad esempio con Visual C++), aggiungendo all'elenco delle librerie da linkare al programma la libreria winsock (ad esempio il file wsock32.lib per i sockets versione 1.1)[/br]
penso che tu debba scaricarti i socket versione 2.0 o 1.1 (cioe' ne sono sicuro). il fatto di cui sono un po' meno sicuro e' se tu debba avere o no per forza il compilatore Visual C++
fammi sapere se trovi questi socket
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
il problema è che non ho idea di dove trovarli!!...nè di dove metterli alla fine!!
cmq ho trovato intanto un altro link:
http://online.infomedia.it/riviste/logi ... ticolo.htm
forse può essere interessante (per te...visto che io non ci capsco nulla!!)
...continuo a cercare...
grazie per la pazienza...
cmq ho trovato intanto un altro link:
http://online.infomedia.it/riviste/logi ... ticolo.htm
forse può essere interessante (per te...visto che io non ci capsco nulla!!)
...continuo a cercare...
grazie per la pazienza...

che significa poi:
?? bisogna fare qlcs tipo "#include..."?? boh..
quote:
aggiungendo all'elenco delle librerie da linkare al programma la libreria winsock (ad esempio il file wsock32.lib per i sockets versione 1.1
?? bisogna fare qlcs tipo "#include..."?? boh..

io nella cartella "lib" di dev-c++ ho il file chiamato wsock32.def c'entra niente?? però non ha un'estensione *.lib...

ho compilato il programma (con visual c++, bisogna includere wsock32.lib tra i file da linkare)
appena trova un sito funzionante lo scrive e smette di funzionare.
posso spedirti l' eseguibile per email.
ti posto il sorgente, giusto per curiosita'.
#include
#include
#include
#define PORT 80
int client(char * server_IP);
int InitializeWinsock(WORD );
int main()
{
char string1[30], string2[10], prima[20], seconda[20];
int n=0, c=0, fino, da;
printf("Inserire la prima parte del sito (per es www.sito): ");
scanf("%s", prima);
printf("Da che numero vuoi partire? ");
scanf("%d", &da);
printf("A che numero vuoi arrivare? ");
scanf("%d", &fino);
printf("Inserire la seconda parte del sito(per es .it): ");
scanf("%s", seconda);
for(n=da;n<=fino;n++){ //i tentativi si effettuano fino a www.vecchio1000.it
strcpy(string1, prima);
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, seconda);
//printf("%s\n", string1);
//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);
system("PAUSE");
return 0;
}
int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire
if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);
if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0
if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");
return 1;
}
int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;
err = WSAStartup(wVersionRequested, &wsaData);
if (err!=0) return 0;
if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;
return 1;
}
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
appena trova un sito funzionante lo scrive e smette di funzionare.
posso spedirti l' eseguibile per email.
ti posto il sorgente, giusto per curiosita'.
#include
#include
#include
#define PORT 80
int client(char * server_IP);
int InitializeWinsock(WORD );
int main()
{
char string1[30], string2[10], prima[20], seconda[20];
int n=0, c=0, fino, da;
printf("Inserire la prima parte del sito (per es www.sito): ");
scanf("%s", prima);
printf("Da che numero vuoi partire? ");
scanf("%d", &da);
printf("A che numero vuoi arrivare? ");
scanf("%d", &fino);
printf("Inserire la seconda parte del sito(per es .it): ");
scanf("%s", seconda);
for(n=da;n<=fino;n++){ //i tentativi si effettuano fino a www.vecchio1000.it
strcpy(string1, prima);
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, seconda);
//printf("%s\n", string1);
//pero' forse devi convertire la stringa in ip non lo so come si fa mi dispiace
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
if(!client(string1))continue;
else {WSACleanup();c=1;break;} //se ti connetti metti c=1 ed esci da ciclo
}
if(!c)printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);
system("PAUSE");
return 0;
}
int client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
//char buf[MAX_STRING]; questo non dovrebbe servire
if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET){
printf("Errore durante la creazione del socket\n");
exit(0);
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(server_IP);
saddr.sin_port = htons(PORT);
if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return 0; //se non si connette ritorna 0
if (closesocket(fd) == SOCKET_ERROR)
printf("Errore durante la chiusura del socket\n");
return 1;
}
int InitializeWinsock(WORD wVersionRequested)
{
WSADATA wsaData;
int err;
err = WSAStartup(wVersionRequested, &wsaData);
if (err!=0) return 0;
if (LOBYTE(wsaData.wVersion )!=1 || HIBYTE(wsaData.wVersion)!=1) return 0;
return 1;
}
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
p.s. spero che funzioni altrimenti non so cosa fare e sarai ocndannato a linux [:D]
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
anche stavolta mi dà 0 errori..ma il programma dove dovrei vederlo????? io gli dico "run" ma lui non mi fa apparire (ad esempio) la scritta "inserisci la prima parte del sito...etc..."
cmq ok per l'eseguibile!! ora ti do la mia e-mail..
spediscimi quest'ultimo in modo che io possa da solo modificare (immettere in questo caso) il link del sito..
grazie
il vecchio
cmq ok per l'eseguibile!! ora ti do la mia e-mail..
spediscimi quest'ultimo in modo che io possa da solo modificare (immettere in questo caso) il link del sito..
grazie
il vecchio

ah ... dimenticavo...stanotte stavo pensando...(è raro...[;)])
visto che in Pascal posso anche scrivere delle unit (non sono assolutamente capace...ma in via del tutto teorica), potrei anche scrivere dei sockets per il Pascal...o no? e quindi potrei realizzare il programma in questione anche con il Pascal...no?
beh...questa è una delle cose mi piacerebbe saper fare e che mi riprometto di imparare un giorno...ma che come al solito non avrò il tempo di fare...[:(]
ciao ciao
il vecchio
visto che in Pascal posso anche scrivere delle unit (non sono assolutamente capace...ma in via del tutto teorica), potrei anche scrivere dei sockets per il Pascal...o no? e quindi potrei realizzare il programma in questione anche con il Pascal...no?
beh...questa è una delle cose mi piacerebbe saper fare e che mi riprometto di imparare un giorno...ma che come al solito non avrò il tempo di fare...[:(]
ciao ciao
il vecchio

ti si dovrebbe aprire una console dos. cmq non mi chiedere come si fa in pascal perche' non lo conosco =)
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen
-----------------------
Il bello di essere intelligente e' che puoi divertirti a fare l' imbecille, ma se sei un imbecille non puoi fare il contrario.
Woody Allen