Pages: 1 [2] 3 4   Go Down
Print
Author Topic: problema esecuzione programmi c linux  (Read 16916 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #15 on: 07-02-2009, 12:32:47 »

allora... il client funziona se invece di passare il parametro dal main lo inserisco direttamente come parametro di inet_addr. Ora voglio provare se tutto il programma distribuito funziona. Userò il tuo come confronto grazie.
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #16 on: 07-02-2009, 12:34:14 »

allora... il client funziona se invece di passare il parametro dal main lo inserisco direttamente come parametro di inet_addr. Ora voglio provare se tutto il programma distribuito funziona. Userò il tuo come confronto grazie.
Figurati . Visto la nuova modalità d'esame , ci dobbiamo aiutare  ok Fammi sapere
Logged
Psycho
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 497



« Reply #17 on: 07-02-2009, 12:38:26 »

si faccio esattamente come hai scritto. Ho consultato lo stevens, q da quanto scritto nel libro, per convertire una stringa in un indirizzo a 32 bit devo utilizzare la function inet_addr.Dunque scrivo:
Code:

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(argv[0]);



a questo punto la struct dovrebbe essere completa. Però continua a darmi quell'errore, forse il problema è nel passaggio dei parametri al main.



il problema di questo codice è che dovresti scrivere argv[1] se non erro,poichè
argv[0]=./nomeFile
Logged

Segnate le date, cancellate gli altri impegni, chiudete i libri e i quaderni e per un attimo accorgetevi che la vita non è piatta ma può essere... 3d!
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #18 on: 07-02-2009, 13:15:36 »

si faccio esattamente come hai scritto. Ho consultato lo stevens, q da quanto scritto nel libro, per convertire una stringa in un indirizzo a 32 bit devo utilizzare la function inet_addr.Dunque scrivo:
Code:

server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(argv[0]);



a questo punto la struct dovrebbe essere completa. Però continua a darmi quell'errore, forse il problema è nel passaggio dei parametri al main.



il problema di questo codice è che dovresti scrivere argv[1] se non erro,poichè
argv[0]=./nomeFile

da errore anche con argv[1]. Acicatena86 per caso puoi postare anche il client ?
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #19 on: 07-02-2009, 13:37:55 »

questo è il mio client
Code:
#include <sys/types.h>
#include<sys/socket.h>
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in server;
struct in_addr sa;
unsigned short port=9000;
char messaggio[300];
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
printf("client partito");
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Errore creazione socket\n");
exit(-1);
}
if(connect(sk,(struct sockaddr*)&server,sizeof(server))<0)
{
printf("Errore connesione\n");
exit(-1);
}
int i=0;

while(i<10)
{
  send(sk,"invio di dati",strlen("invio di dati\n")+1,0);
  recv(sk,messaggio,sizeof(messaggio),0);
  printf("Risposta server: %s",messaggio);
  i++;
}
close(socket);
exit(0);


}


in pratica quando lo faccio partire mi ritorna il prompt dei comandi. E' possibile che non sia in grado di fare comunicare il server e il client perchè si trovano sulla stessa macchina e utilizzo la famiglia delle socket AF_INET?
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #20 on: 07-02-2009, 13:46:50 »

ho tolto il ciclo while, e i programmi partono ma mi danno errore nell'accept della connessione ora ci lavoro un pò su
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #21 on: 07-02-2009, 13:52:06 »

Ecco il mio client


Code:


#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<string.h>
#include<netinet/in.h>
#include<unistd.h>


int main(int argc,char *argv[])
{
struct sockaddr_in addr_serv;
struct hostent *host;

if(argc!=4)
{
printf("Il client %s si usa con IP - PORT - VAL \n",argv[0]);
exit(-1);
}


addr_serv.sin_family=AF_INET;
u_int16_t  port=htons( atoi(argv[2])  );

addr_serv.sin_port=port;

host=gethostbyname(argv[1]);

memcpy(&addr_serv.sin_addr,host->h_addr_list[0],sizeof(host->h_addr_list[0]));

int s=socket(PF_INET,SOCK_STREAM,0);

int c=connect(s,(struct sockaddr*)&addr_serv,sizeof(addr_serv));



write(s,argv[3],sizeof(argv[3]));

int retcode;
char risp[100];
while( (retcode=read(s,risp,sizeof(risp)))!=0)
{
if(retcode==-1)
{printf("errore nella lettura\n");
exit(-2);
}

printf("Il server risponde con questo messaggio \n");
write(fileno(stdout),risp,retcode);
}

printf("Chiudo la connessione\n");
close(s);
exit(0);
}



Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #22 on: 07-02-2009, 14:43:54 »

posto il mio codice:

lato server:
Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in client;
struct sockaddr_in server;
int clientaddr_size;
int client_connect;
char data[300];
char response[]="Messaggio ricevuto";
unsigned short port=9000;
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=INADDR_ANY;
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
  { 
    printf("Errore di creazione socket nel server\n");
    exit(-1);
  }
if((bind(sk, (struct sockaddr *) &server, sizeof(server)))<0)
{printf("Errore di collegamento socket\n");
exit(-1);}
listen(sk,20);
while(1)
{
   if((client_connect=accept(sk,(struct sockaddr *) &client,&clientaddr_size))<0)
   {printf("Errore nell'accettare la connessione\n");exit(-1);}
    recv(client_connect,data,sizeof(data),0);
    printf("Ho ricevuto: %s", data);
    send(client_connect,response,sizeof(response),0);
    close(client_connect);   
}
exit(0);
}



lato client:

Code:
#include <sys/types.h>
#include<sys/socket.h>
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>

int main()
{
int sk;
struct sockaddr_in server;
struct in_addr sa;
unsigned short port=9000;
char messaggio[300];
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
printf("client partito\n");
if((sk=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Errore creazione socket\n");
exit(-1);
}
if((connect(sk,(struct sockaddr*)&server,sizeof(server)))<0)
{
 printf("Errore connesione\n");
 exit(-1);
}
send(sk,"invio di dati",strlen("invio di dati\n")+1,0);
recv(sk,messaggio,sizeof(messaggio),0);
printf("Risposta server: %s",messaggio);
close(socket);
exit(0);


}



il programma dovrebbe funzionare. Il mio intento era quello di collegare gli host senza ricorrere alla chiamata hostent e tutto il resto.Soltanto che l'accept del server restituisce errore e non so il perchè. Magari ne riparlerò con il prof. Grazie per l'aiuto ragazzi.
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
winnie86
Apprendista Forumista
**
Offline Offline

Posts: 119



« Reply #23 on: 09-02-2009, 16:14:31 »

Ciao a tutti!!!
sto provando a eseguire gli esercizi scaricati dal sito del prof...ma non ci riesco perchè ad ogni compilazione di qualunque esercizio mi da sempre qualche errore!!!cosa posso fare?

Grazie!
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #24 on: 09-02-2009, 16:16:19 »

che tipo di errore ti da ?
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
winnie86
Apprendista Forumista
**
Offline Offline

Posts: 119



« Reply #25 on: 09-02-2009, 16:19:36 »

ad esempio... su fingers.c mi si ferma sulla riga "struct sockaddr_in locAddr, farAddr"
e credo che non mi riconosca le librerie...poi mi dice "storage size of locAddr isn't know" (lo stesso per farAddr)...e poi "AF_INET undeclared"...!
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #26 on: 09-02-2009, 16:22:33 »

fammi capire questo errore lo da appena compili i file ? se si hai provato a compilarlo sia da scite che da console ?
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
winnie86
Apprendista Forumista
**
Offline Offline

Posts: 119



« Reply #27 on: 09-02-2009, 16:27:48 »

si...ho utilizzato Dev-C++ IDE e ho provato anche da console con il comando cc...se non sbaglio!
Logged
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #28 on: 09-02-2009, 16:30:43 »

fai così: dirigiti nella cartella in cui si trova il file finger.c e digita

Code:
gcc fingerc.c -o fingerc


dovrebbe compilarti il tutto senza problemi. Poi digita un bel
Code:
./fingerc

per eseguire l'applicazione. Se non dovesse compilare dai uno sguardo ai pacchetti e assicurati che il compilatore abbia tutte le librerie a disposizione.
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
winnie86
Apprendista Forumista
**
Offline Offline

Posts: 119



« Reply #29 on: 09-02-2009, 16:41:08 »

già quando faccio gcc addrcnv.c -o addrcnv mi da questi errori:

"addrcnv.c:3:19: error: stdio.h: No such file or directory
addrcnv.c:4:23: error: arpa/inet.h: No such file or directory
addrcnv.c:5:20: error: string.h: No such file or directory
addrcnv.c: In function ‘main’:
addrcnv.c:9: error: storage size of ‘sa’ isn’t known
addrcnv.c:14: warning: incompatible implicit declaration of built-in function ‘fprintf’
addrcnv.c:14: error: ‘stderr’ undeclared (first use in this function)
addrcnv.c:14: error: (Each undeclared identifier is reported only once
addrcnv.c:14: error: for each function it appears in.)
addrcnv.c:17: warning: incompatible implicit declaration of built-in function ‘exit’
addrcnv.c:20: warning: assignment makes pointer from integer without a cast
addrcnv.c:21: warning: incompatible implicit declaration of built-in function ‘strcpy’
addrcnv.c:23: warning: incompatible implicit declaration of built-in function ‘printf’
addrcnv.c:31: warning: incompatible implicit declaration of built-in function ‘exit’
addrcnv.c:32:2: warning: no newline at end of file
"
Logged
Pages: 1 [2] 3 4   Go Up
Print
Jump to: