Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c]Problema Winsock con ricezione dati

    La mia idea sarebbe di mandare un messaggio per ora in locale ma quando eseguo il programma mi dice che ho ricevuto -1 byte e quando stampo a video il messaggio mi dice - ecco i sorgenti:
    Server:
    codice:
    #include <stdio.h>
    #include <winsock.h>
    int main()
    { 
      int err, lun;  
      WSADATA data;  
      WORD p; 
      p = MAKEWORD(2,0); 
      err = WSAStartup(p,&data); 
      SOCKET sock, client; 
      struct sockaddr_in sock_addr, client_addr;
      sock=socket(PF_INET,SOCK_STREAM,0); 
      sock_addr.sin_family=PF_INET;  
      sock_addr.sin_port=htons(1010);
      sock_addr.sin_addr.s_addr=INADDR_ANY;
      err = bind(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr_in));
      err = listen(sock,1);
      lun = sizeof (struct sockaddr); 
      client = accept(sock,(struct sockaddr*)&client_addr,&lun);
      if (err!=0) printf ("Errore connessione");
      char recvbuf[32];
      int bytesRecv=SOCKET_ERROR;
      for( ; ; ){
      bytesRecv=recv(sock, recvbuf, 32, 0 );
      printf( "Bytes ricevuti: %d\n", bytesRecv);
      printf("Messaggio Ricevuto: %s\n", recvbuf);
      }
      WSACleanup();
      return 0; 
    }
    Client:
    codice:
    #include <winsock.h> 
    #include <stdio.h>
    int main()
    {   
    SOCKET sock; 
    struct sockaddr_in sock_addr; 
    WSADATA data; 
    WORD p;
    p=MAKEWORD(2,0);  
    WSAStartup(p,&data); 
    sock=socket(PF_INET,SOCK_STREAM,0); 
    sock_addr.sin_family=PF_INET; 
    sock_addr.sin_port=htons(1010); 
    sock_addr.sin_addr.S_un.S_un_b.s_b1=127; 
    sock_addr.sin_addr.S_un.S_un_b.s_b2=0;
    sock_addr.sin_addr.S_un.S_un_b.s_b3=0;
    sock_addr.sin_addr.S_un.S_un_b.s_b4=1;
    connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr));
    int bytesSent;
    char sendbuf[32] = "ciao";
    for( ; ; )
    {
    bytesSent = send(sock, sendbuf, strlen(sendbuf),0);
    printf( "Messaggio: %s\n", sendbuf );
    printf("Bytes Inviati: %ld\n",bytesSent);
    }
    closesocket(sock); 
    WSACleanup();       
    return 0;
    }

  2. #2
    Su questo codice si potrebbe parlare a lungo... Comunque credo che l'errore principale sia che nelle funzione recv del server metti il socket del server e non quello del client, dal quale dovrebbe ricevere i dati!! Ti consiglio di fare meglio il controllo dei valori di ritorno da tutte le funzioni, per prevenire eventuali errori...

    Non riesco a capire il senso di questa inizializzazione della variabile??
    int bytesRecv=SOCKET_ERROR;

    P.S un altro consiglio, delle winsock è stata sviluppata la versione due , ti conviene usare quella!!!

  3. #3
    Grazie adesso funziona tutto,
    per la questione del SOCKET_ERROR devo aver sbagliato variabile all'ultima ho incasinato tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.