2009-09-07 6 views
3

Je travaille sur un programme socket et tout semble correct lors de la compilation. D'abord, je compile et exécute le serveur, puis je compile et exécute le client. Le serveur fonctionnera correctement, mais lorsque le client démarre, un message d'erreur s'affiche dans la fonction Connect(). Bien que la prise semble correcte, le client ne se connecte pas et le serveur ne voit pas la tentative de connexion.Erreur sur le programme client/serveur c: "Connect: opération de socket sur non-socket"

Le message d'erreur est:

Connect: opération Socket sur la non-prise

Voici le code côté serveur:

if ((ListeningSocket = socket(AF_INET, SOCK_STREAM,0)) == -1){ 
     printf("socket failed!\n"); 
     exit(1); 
    } 

    else 
      printf("Server: socket() is OK!\n"); 


    ServerAddr.sin_family = AF_INET; 
    ServerAddr.sin_port = htons(5000); 
    ServerAddr.sin_addr.s_addr = INADDR_ANY; // any one for any network can connect 
    memset(&(ServerAddr.sin_zero), '\0', 8); // 


    if (bind (ListeningSocket, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr))==-1) 
    { 
      printf("Server: bind() failed!\n"); 
      exit (1); 
    } 
    else 
      printf("Server: bind() is OK!\n"); 

    if (listen(ListeningSocket,5)== -1){ 
      printf("Server: Error listening on socket\n"); 
      exit (1); 
    } 
    else{ 
    printf("Server: listen() is OK, I'm waiting for connections...\n"); 
    printf("Server: accept() is ready...\n");} 



     sin_size = sizeof(struct sockaddr_in); 
    NewConnection = accept(ListeningSocket, (struct sockaddr *)&ClientAddr,(socklen_t *)&sin_size); 
     printf("Server: accept() is OK...\n"); 
     printf("Server: Client connected, ready for receiving and sending data...\n"); 

......... 
.... 

//} 

Et voici le client- code secondaire:

if(SendingSocket = socket(AF_INET, SOCK_STREAM, 0) == -1) 
    { 
      printf("Client: socket() failed!"); 
      exit (1); 
    } 
    else 
      printf("Client: socket() is OK!\n"); 


    ClientAddr.sin_family = AF_INET; 
    ClientAddr.sin_port = htons(5000); 
    ClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
    memset(&(ClientAddr.sin_zero), '\0', 8); 




if (connect (SendingSocket, (struct sockaddr *)&ClientAddr, 
        sizeof(struct sockaddr)) == -1) 
     { 
      perror("Connect"); 
      exit(1); 
     } 


    else 
    { 
      printf("Client: connect() is OK, got connected...\n"); 
      printf("Client: Ready for sending and/or receiving data...\n"); 
    } 

.... 

Répondre

13

Il vous manque une parenthèse. Le code

if(SendingSocket = socket(AF_INET, SOCK_STREAM, 0) == -1) 

devrait lire

if((SendingSocket = socket(AF_INET, SOCK_STREAM, 0)) == -1) 

La façon dont vous l'avez écrit, cela signifie

if(SendingSocket = (socket(AF_INET, SOCK_STREAM, 0) == -1)) 

qui signifie: comparer la prise() résultat à -1, donnant 0 ou 1 , et l'assigner à SendingSocket; puis testez si c'est vrai ou faux. SendingSocket est donc 0, en supposant que l'appel socket() a réussi.

+1

ohh okey il semble savoir très bien. vraiment je ne peux pas imaginer qu'une parenthèse passera mes 6 heures :) merci ... donc si quelqu'un obtient l'erreur de "erreur est Connect: Socket opération sur non socket" devrait être plus prudent en utilisant la parenthèse. – berkay

+0

@berkay Non, ce n'est qu'une des causes possibles. – EJP

Questions connexes