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