ciao ragazzi mi serve una mano..ci sto sbattendo da giorni ma non capisco come risolvere il problema.
praticamente ho un fatto i codici del client e del server che comunicano con connessione di tipo UDP.Ora solo che se vado eseguire i due programmi non comunicano tra loro. cioè se apro il server mi dice subito che ha ricevuto i datagrammi e chiude il programma,anche se non c'è nessun client connesso.e la stessa cosa succede con il client,mi dice che il client ha inviato la parola al server con successo anche se non c'è nessun server attivo.non so più come fare.
CLIENT
SERVERcodice:#if defined WIN32 #include <winsock.h> #else #define closesocket close #include <sys/socket.h> #include <arpa/inet h> #include <arpa/inet.h> #include <unistd.h> #endif #include <stdio.h> #include <string.h> /* for memset() */ #define ADDR "127.0.0.1" #define PORT 18000 void die_with_error(char * msg) { } int main() { #ifdef WIN // Initialize Winsock WSADATA wsaData; if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { printf("Error at WSAStartup()\n"); return 0; } #endif int send_socket; struct sockaddr_in srv_addr; char* buff = "ciao"; int bufflen = sizeof(buff); // Create a socket to send datagrams if ((send_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))< 0) die_with_error("socket() failed"); // zero out and constuct the srv address struct memset(&srv_addr, 0, sizeof(srv_addr)); srv_addr.sin_family = PF_INET; srv_addr.sin_port = htons(PORT); srv_addr.sin_addr.s_addr = inet_addr(ADDR); // send the data printf("sending %s\n", buff); if( (sendto(send_socket, buff, bufflen, 0, (struct sockaddr *)&srv_addr, sizeof(srv_addr))) != bufflen) die_with_error("sendto() failed"); // Close the socket when finished sending datagrams printf("Finished sending. Closing socket.\n"); closesocket(send_socket); #ifdef WIN WSACleanup(); #endif system("pause"); return 0; }
vi posto i due codici sperando in una vostra manocodice:#if defined WIN32 #include <winsock.h> #else #define closesocket close #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #endif #include <stdio.h> #include <string.h> /* for memset */ #define ADDR "127.0.0.1" #define BUFFLEN 255 #define PORT 18000 void die_with_error(char * msg) { }; int main() { #ifdef WIN // Initialize Winsock WSADATA wsaData; if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){ printf("Error at WSAStartup()\n"); return 0; } #endif int recv_socket; struct sockaddr_in recv_addr; struct sockaddr_in sender_addr; unsigned int sender_addr_size; char recv_buff[BUFFLEN]; memset(&recv_buff, 0, BUFFLEN); // Create a receiver socket to receive datagrams if ((recv_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))< 0) die_with_error("socket() failed"); // Bind the socket to the address and port specified. memset(&recv_addr, 0, sizeof(recv_addr)); recv_addr.sin_family = PF_INET; recv_addr.sin_port = htons(PORT); recv_addr.sin_addr.s_addr = htonl(INADDR_ANY); if( (bind(recv_socket, (struct sockaddr *) &recv_addr, sizeof(recv_addr))) <0) die_with_error("bind() failed"); // Call the recvfrom function to receive datagrams // on the bound socket. printf("Receiving datagrams...\n"); sender_addr_size = sizeof(sender_addr); recvfrom(recv_socket, recv_buff, sizeof(recv_buff), 0,(const struct sockaddr_in*)&sender_addr, &sender_addr_size); // Close the socket when finished receiving datagrams printf("Received %s.\nFinished receiving. Closing socket.\n", recv_buff); closesocket(recv_socket); #ifdef WIN WSACleanup(); #endif system("pause"); return 0; }![]()

Rispondi quotando