Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come avviare connessione UDP tra server e client
Forum - C/C++ - Come avviare connessione UDP tra server e client

Avatar
graziello (Normal User)
Newbie


Messaggi: 2
Iscritto: 03/05/2011

Segnala al moderatore
Postato alle 19:06
Martedì, 03/05/2011
ciao ragazzi.ho fatto il codice sia del client sia del server ma ho problemi a farli comunicare tra loro.cioè se esegue il server fa tutto,riceve anche se non c'è nessun client connesso.e il client invia nonostante non sia connesso a nessun server.vi posto i codice  per farvi capire un pò


CLIENT

Codice sorgente - presumibilmente C++

  1. #if defined WIN32
  2. #include <winsock.h>
  3. #else
  4. #define closesocket close
  5. #include <sys/socket.h>
  6. #include <arpa/inet h> #include <arpa/inet.h>
  7. #include <unistd.h>
  8. #endif
  9. #include <stdio.h>
  10. #include <string.h> /* for memset() */
  11. #define ADDR "127.0.0.1"
  12. #define PORT 18000
  13.  
  14. void die_with_error(char * msg)
  15. {
  16.  
  17. }
  18.  
  19. int main() {
  20.         #ifdef WIN
  21.         // Initialize Winsock
  22.         WSADATA wsaData;
  23.  
  24.         if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
  25.                 printf("Error at WSAStartup()\n");
  26.                 return 0;
  27.         }
  28.         #endif
  29.  
  30.         int send_socket;
  31.         struct sockaddr_in srv_addr;
  32.         char* buff = "ciao";
  33.         int bufflen = sizeof(buff);
  34.  
  35.         // Create a socket to send datagrams
  36.         if ((send_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))< 0)
  37.                 die_with_error("socket() failed");
  38.  
  39.         // zero out and constuct the srv address struct
  40.         memset(&srv_addr, 0, sizeof(srv_addr));
  41.         srv_addr.sin_family = PF_INET;
  42.         srv_addr.sin_port = htons(PORT);
  43.         srv_addr.sin_addr.s_addr = inet_addr(ADDR);
  44.         // send the data
  45.  
  46.         printf("sending %s\n", buff);
  47.         if( (sendto(send_socket, buff, bufflen, 0, (struct sockaddr *)&srv_addr, sizeof(srv_addr))) != bufflen)
  48.                 die_with_error("sendto() failed");
  49.  
  50.         // Close the socket when finished sending datagrams
  51.         printf("Finished sending. Closing socket.\n");
  52.  
  53.         closesocket(send_socket);
  54.  
  55.         #ifdef WIN
  56.         WSACleanup();
  57.         #endif
  58.         system("pause");
  59.         return 0;
  60. }


SERVER
Codice sorgente - presumibilmente C++

  1. #if defined WIN32
  2. #include <winsock.h>
  3. #else
  4. #define closesocket close
  5. #include <sys/socket.h>
  6. #include <arpa/inet.h>
  7. #include <unistd.h>
  8. #endif
  9. #include <stdio.h>
  10. #include <string.h> /* for memset */
  11. #define ADDR "127.0.0.1"
  12. #define BUFFLEN 255
  13. #define PORT 18000
  14.  
  15. void die_with_error(char * msg)
  16. {
  17.  
  18. };
  19. int main()
  20. {
  21.         #ifdef WIN
  22.         // Initialize Winsock
  23.         WSADATA wsaData;
  24.  
  25.         if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
  26.                 printf("Error at WSAStartup()\n");
  27.                 return 0;
  28.         }
  29.         #endif
  30.  
  31.         int recv_socket;
  32.         struct sockaddr_in recv_addr;
  33.         struct sockaddr_in sender_addr;
  34.         unsigned int sender_addr_size;
  35.         char recv_buff[BUFFLEN];
  36.  
  37.         memset(&recv_buff, 0, BUFFLEN);
  38.  
  39.         // Create a receiver socket to receive datagrams
  40.         if ((recv_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))< 0)
  41.                 die_with_error("socket() failed");
  42.  
  43.         // Bind the socket to the address and port specified.
  44.         memset(&recv_addr, 0, sizeof(recv_addr));
  45.         recv_addr.sin_family = PF_INET;
  46.         recv_addr.sin_port = htons(PORT);
  47.         recv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  48.  
  49.         if( (bind(recv_socket, (struct sockaddr *) &recv_addr, sizeof(recv_addr))) <0)
  50.                 die_with_error("bind() failed");
  51.  
  52.         // Call the recvfrom function to receive datagrams
  53.         // on the bound socket.
  54.         printf("Receiving datagrams...\n");
  55.         sender_addr_size = sizeof(sender_addr);
  56.         recvfrom(recv_socket, recv_buff, sizeof(recv_buff), 0,(const struct sockaddr_in*)&sender_addr, &sender_addr_size);
  57.  
  58.         // Close the socket when finished receiving datagrams
  59.         printf("Received %s.\nFinished receiving. Closing socket.\n", recv_buff);
  60.  
  61.         closesocket(recv_socket);
  62.  
  63.         #ifdef WIN
  64.         WSACleanup();
  65.         #endif
  66.  
  67.         system("pause");
  68.         return 0;
  69.         }


io non capisco dove sbaglio.:(

Ultima modifica effettuata da graziello il 03/05/2011 alle 19:24
PM Quote