Pages: [1]   Go Down
Print
Author Topic: Connessione client /server  (Read 1128 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« on: 06-11-2012, 18:35:51 »

sto provando per esercizio a connettere client e server con le socket, ma mi da un errore di bad address ecco il codice:

CLIENT
Code:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <arpa/inet.h>
#include <netdb.h>



#define HOSTIP "127.0.0.1"

void main(){
   
    int socketID;
    int retcode;
    u_int16_t PORT=80;
    struct sockaddr_in ipH;
    struct hostent * host;
   
    if ((socketID=socket(AF_INET,SOCK_STREAM,0))==-1){
         perror("socket create failed %d\n");
    }
   
    ipH.sin_family=AF_INET;
    ipH.sin_port=80;
    inet_aton(HOSTIP,&ipH.sin_addr);
   
   
    retcode=connect(socketID,(struct sockaddr*)&ipH,sizeof(ipH));
   
    if(retcode==-1){
        perror("connection failed %d\n");
    }
   
   
   
   

}

SERVER

Code:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <arpa/inet.h>

#define HOSTIP "127.0.0.1"



void main() {
    printf("asd\n");
    int sockID,socket2;
    int retcode;
    uint16_t PORT=80;
    struct sockaddr_in ipH;
   
    ipH.sin_family=AF_INET;
    ipH.sin_port=80;
     
    inet_aton(HOSTIP,&ipH.sin_addr);
   
    sockID=socket(AF_INET,SOCK_STREAM,0);
   
    printf("My address/port: %s  ", inet_ntoa(ipH.sin_addr));
printf(":%d\n", ntohs(ipH.sin_port));

    retcode=bind(sockID,(struct sockaddr*)&ipH,sizeof(ipH));
   
    if(retcode==-1){
        perror("connection failed\n");
       
    }
   
    retcode=listen(sockID,512);
   
    if(retcode==-1){
        perror("listen failed\n");
    }
   
    if((socket2=accept(sockID,(struct sockaddr*)&ipH,(int *)sizeof(struct sockaddr_in)))==-1){
        perror("errore accept");
        exit(0);
    }
       
    printf("soket del server %d connessa a indirizzo %s\n",socket2,HOSTIP);
   
 
}
Logged

Aliens Exist
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #1 on: 06-11-2012, 18:49:55 »

ok.. ho risolto, l'errore era che non inserivo l'ip del client 
Logged

Aliens Exist
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #2 on: 09-11-2012, 13:08:06 »

Cosa non va in questo codice? Nel client retcode = -1

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

int main() {
    struct sockaddr_in myAddr;
    myAddr.sin_family = AF_INET;
    myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    myAddr.sin_port = 80;
    
    int s = socket(PF_INET, SOCK_STREAM, 0);
    
    bind(s, (struct sockaddr *) &myAddr, sizeof(myAddr));
    listen(s, 1);
    
    int s1 = accept(s, (struct sockaddr*) &myAddr, sizeof(myAddr));
}

CLIENT:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main() {
    struct sockaddr_in myAddr;
    myAddr.sin_family = AF_INET;
    myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    myAddr.sin_port = 80;

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

    int retcode = connect(t, (struct sockaddr*) &myAddr, sizeof(myAddr));
    if (retcode != -1) { printf("Connesso"); }
    else {
        printf("Errore: %d\n", retcode);
    }
}
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #3 on: 09-11-2012, 14:53:57 »

    myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

dovresti usare sia in cliente e server: inet_aton("127.0.0.1",&myAddr.sin_addr), non posso provarlo in questo momento.. quindi non ne sono sicuro
Logged

Aliens Exist
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #4 on: 10-11-2012, 18:42:06 »

   myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

dovresti usare sia in cliente e server: inet_aton("127.0.0.1",&myAddr.sin_addr), non posso provarlo in questo momento.. quindi non ne sono sicuro


Non mi va comunque 

SERVER:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define HOSTIP "127.0.0.1"

int main() {
    struct sockaddr_in myAddr;
    myAddr.sin_family = AF_INET;
    myAddr.sin_port = 80;
    //myAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    inet_aton(HOSTIP,&myAddr.sin_addr);
    int s = socket(AF_INET, SOCK_STREAM, 0);
    bind(s, (struct sockaddr *) &myAddr, sizeof(myAddr));
    listen(s, 512);
    int s1 = accept(s, (struct sockaddr*) &myAddr, sizeof(myAddr));
    if (s1 == -1) {
        printf("Errore accept\n");
    }
    else {
        printf("Socket del server %d connessa a indirizzo %s\n", s1, HOSTIP);
    }
}

CLIENT:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#define HOSTIP "127.0.0.1"

int main() {
    int t = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in myAddr;   
    myAddr.sin_family = AF_INET;
    myAddr.sin_port = 80;
    inet_aton(HOSTIP, &myAddr.sin_addr);
    int retcode = connect(t, (struct sockaddr*) &myAddr, sizeof(myAddr));
    if (retcode != -1) { printf("Connesso"); }
    else {
        printf("Errore: %d\n", retcode);
    }
}
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #5 on: 10-11-2012, 19:13:48 »

ecco qua...  ora funziona

SERVER

Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define HOSTIP "127.0.0.1"

int main() {
    struct sockaddr_in myAddr;
    struct sockaddr_in myAddr2;
    int length,s,s1;

    myAddr.sin_family = AF_INET;
    myAddr.sin_port = 80;
    inet_aton(HOSTIP,&myAddr.sin_addr);

    s = socket(AF_INET, SOCK_STREAM, 0);

    bind(s, (struct sockaddr *) &myAddr, sizeof(myAddr));

    listen(s, 512);

    length=sizeof(myAddr2);
    s1 = accept(s, (struct sockaddr*)&myAddr2, &length);
   
    if (s1 == -1) {
        printf("Errore accept\n");
    }
    else {
        printf("Socket del server %d connessa a indirizzo %s\n", s1, HOSTIP);
    }
}


CLIENT

Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#define HOSTIP "127.0.0.1"

int main() {
    int t = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in myAddr;
    int retcode;
  
    myAddr.sin_family = AF_INET;
    myAddr.sin_port = 80;
    inet_aton(HOSTIP, &myAddr.sin_addr);

    retcode = connect(t, (struct sockaddr*) &myAddr, sizeof(myAddr));
    if (retcode != -1) { printf("Connesso\n"); }
    else {
        printf("Errore: %d\n", retcode);
    }
}
« Last Edit: 10-11-2012, 19:25:53 by Chuck_son » Logged

Aliens Exist
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« Reply #6 on: 10-11-2012, 19:15:10 »

allora... devi fare attenzione infatti, in C non si possono dichiarare variabili "a metà codice" , ma solo dopo una chiusura di parentesi graffa... quindi praticamente ti conviene dichiararle all'inizio e te ne esci...
Logged

Aliens Exist
Pages: [1]   Go Up
Print
Jump to: