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
codice:
#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;
}
SERVER
codice:
#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;
        }
vi posto i due codici sperando in una vostra mano