ancora pascal...

Messaggioda vecchio » 26/12/2004, 00:32

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... [;)]

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 596 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda eafkuor » 26/12/2004, 01:11

con il c si puo' fare una cosa del genere se ti interessa dimmelo che domani ti rispondo, ora proprio non ho la forza per farlo (guarda che ore sono mentre ti scrivo:)
comunque quello che ti interessa sono i socket per la programmazione di rete e qualche funzione della libreria string.h

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 109 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 26/12/2004, 13:41

ok vai spiega pure...e casomai credo proprio che dovrai:
1) dirmi dove posso scaricare il C
2) consigliarmi un buon manuale on line
3) in caso non fossi capace scrivermi il listato del programma, del quale poi modificherò alcune cose in modo da poter crercare il sitoo che mi interessa

ti ringrazio anticipatamente

saluti
il vecchio

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 597 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda eafkuor » 26/12/2004, 23:40

per linux:

#gcc prog.c -o prog

ti compila il file prog.c in prog

per windows il compilatore e' devcpp, per scaricarlo: http://www.bloodshed.net/devcpp.html (scarica la 4)

i file devono essere *.c

una guida generale al c la puoi trovare a: http://ada2.unipv.it/biblio/trickyc/00c.htm (oppure scaricati la versione in pdf, il titolo e' "tricky c")

qualche manuale sull' uso dei socket:

http://www.mojodo.it/index.php?pg=lessons
http://www.valtellinux.it/prj/rete/
ma probabilmente la migliore e'
http://www.ecst.csuchico.edu/~beej/guide/net/

se hai qualche problema dimmelo

per trasformare la stringa comunque le funzioni che ti servono sono:

strcpy(string, "ciao"); //mette la stringa "ciao" (senza virgolette) nella variabile string

strcat(string1, string2); //concatena string2 a string1

puoi fare una cosa del genere

char string1[40], string2[40]; //due variabili che possono contenere massimo 40 caratteri

strcpy(string1, "www.vecchio"); //ora string 1 contiene "www.vecchio" (senza virgolette)

//qui ti crei le seconda parte dell' indirizzo e la metti in string2
//mettiamo che per esempio la seconda parte ora sia "123.it"

strcat(string1, string2); //ora string1 contiene "www.vecchio123.it"

//qui provi a collegarti all' indirizzo contenuto in string1 attraverso i socket
//se si collega il programma termina, altrimenti cambi indirizzo

ovviamente ti serve un ciclo che ogni volta ti modifica l' indirizzo e prova a collegarsi

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 113 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda eafkuor » 26/12/2004, 23:47

- edit
un modo molto piu' facile e': sprintf( msg, "%i", n);

ti mette nella variabile char msg il valore presente nella variabile int n
- edit


per convertire un int in un char ho trovato questo (spero che l' autore non me ne voglia se ho riportato questa spiegazione qui):

I believe that you will need to convert numbers highers then 10, so you will need not just a char, but a char string. To make just one char, here it is....

int value = 5;

char score = (char) value + 48;

(char) between () ensure that the value will be readed as a char...
48 is the ASCII code for the caracter 0...

Now, to convert an int number that is bigger than 10, you need a string... so... Lets create one routine to do that...

#define StrLength 10

int ConvertIntString(char* str, int value)
{
int i=0;
while(value > 0)
{ str[i] = (char)(value % 10) + 48;
value = value / 10; i++;
}
return i;
}

int main()
{
char* str = new char[StrLength];
int length = ConvertIntString(str,76587654);
for(int i=length-1;i>=0;i--) cout<<str[i]; // you can use your output function here to output the chars
delete str;
return 0;
}

well, i tested the above routines, and it works fine.... the ConvertIntString() returns in str pointer the int value converted to chars, but in backwards ( just to avoid computer process.) When you print it, you do it in backwards so you have the right direction of numbers again. Its important to have
a char* pointer and create a array of chars on it, so you can send it as parameter to the function. I dont know if there is any other lighter way to do it, avoind unnecessary computer process...

I hope it helps!!! Bye!!!!!

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 114 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda eafkuor » 27/12/2004, 00:10

ho fatto prima a farti il programma =) (domani lo finisco)

se vuoi finirlo da solo leggiti tricky c per qualche conoscenza sul c (generale)
poi ho trovato questa guida perfetta per i nostri scopi sui socket, lascia perdere quelle che ti ho dato in precedenza: http://www.bsrf.org.uk/tutorials/csocketit.txt


//programma
#include <stdio.h>

int main(){

char string1[30], string2[10];
int n=0, c=0;


while(n<1000){ //i tentativi si effettuano fino a www.vecchio1000.it

strcpy(string1, "www.vecchio");
sprintf(string2, "%i", n);
strcat(string1, string2);
strcat(string1, ".it");


//qui provi a connetterti al sito
//se ti connetti allora setti c=1 ed esci
//altrimenti passi all' iterazione successiva
//te lo faccio domani

}

if(!c) printf("Non sono riuscito a collegarmi a nessun sito\n");
else printf("Mi sono collegato al sito %s\n", string1);

return 0;
}

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 115 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda eafkuor » 27/12/2004, 12:09

ecco il programma completo se non dovesse funzionare qualcosa dimmelo


#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> /* netbd.h è necessario per struct hostent */

#define PORT 80 /* porta aperta sull' host remoto */ //puoi cambiarla

int main(){

char string1[30], string2[10];
int n=0, c=0;
int fd; /* descrittori di file*/

struct hostent *he; /* struttura da cui si otterranno informazioni riguardo all'host remoto */
struct sockaddr_in server; /* informazioni sull'indirizzo del server */


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");

//codice rubato da una guida di BracaMan
if((he = gethostbyname(string1)) == NULL)
{ /* invoca gethostbyname() */
continue;//se non trova l' host passa direttamente all' iterazione successiva
}

if((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ /* invoca socket() */
continue;
}

server.sin_family = AF_INET;
server.sin_port = htons(PORT); /* si necessita ancora di htons() */
/*he->h_addr passa l'informazione di "*he" a "h_addr" */
server.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(server.sin_zero), 8);

if(connect(fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1)
{
continue;
}
//fine codice rubato da una guida di BracaMan
else {close(fd);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;
}

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 116 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 27/12/2004, 15:13

perdonami ma sono un po' (parecchio) digiuno di C++...ho copiato il tuoo programma (non è che ci abbia capito moltissimo...però qualcosina si dai!! [;)])...ma quando lo compilo con Dev-C++ mi trova tre errori alla riga 3,4,5...credo, se ho ben capito, che non abbia
<sys/socket.h>
<netinet/in.h>
<netdb.h>
che a quanto ho capito (poco..) dovrebbero essere una specie di librerie dalle quali il programma attinge per poter funzionare..giusto?? dove le trovo allora?? ho provato a cercare su internet...ma non è che abbia capito molto...(mm...non è la prima volta che lo dico vero? [:D])
beh...fammi sapere..
ah..poi un altra cosa...il programma che ho scritto sul compilkatore lo devo salvare nella cartella in cui è installato il compilatore o posso anche salvarla sul desktop per esempio?
fammi sapere..non vedo l'ora di far girare questo programma!!!

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 599 di 1036
Iscritto il: 17/07/2003, 14:35

Messaggioda eafkuor » 28/12/2004, 11:44

puoi anche salvarlo sul desktop =)
il problema e' che quelle librerie sono per linux =/
devi scaricarti una guida ai winsock (i socket per windows) e modificare il programma
oppure procurarti linux ;)
p.s. finora ho trovato tutte guide ai winsock solo per visual basic

-----------------------
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
eafkuor
Senior Member
Senior Member
 
Messaggio: 118 di 1106
Iscritto il: 08/03/2004, 15:59
Località: Italy

Messaggioda vecchio » 28/12/2004, 15:26

beh...adesso non è che mi metto a installare linux..anche perchè non lo saprei usare!!
per quanto riguarda i winsock...ti prego di aiutarmi a cercare perchè non mi è chiaro il tutto...

<img src="http://www.vecchio85.supereva.it/vecchio.gif" border=0>
Avatar utente
vecchio
Senior Member
Senior Member
 
Messaggio: 608 di 1036
Iscritto il: 17/07/2003, 14:35

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite