Ceci est un simple serveur UDP. J'essaie de transmettre des données à certains clients, mais malheureusement, il est incapable de transmettre des données. Bien que send fonctionne assez bien, mais il retourne avec un retour valeur signifie qu'il n'a rien envoyé.Sur le client, ils reçoivent, mais encore une fois, évidemment, zéro octet.Serveur UDP envoyant seulement 0 octet de données
void* UdpServerStreamToClients(void *fileToServe)
{
int sockfd,n=0,k;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char dataToSend[1000];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(32000);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
FILE *fp;
if((fp=fopen((char*)fileToServe,"r"))==NULL)
{
printf("can not open file ");
perror("fopen");
exit(1);
}
int dataRead=1;
while(dataRead)
{
len = sizeof(cliaddr);
if((dataRead=fread(dataToSend,1,500,fp))<0)
{
perror("fread");
exit(1);
}
//sleep(2);
for(list<clientInfo>::iterator it=clients.begin();it!=clients.end();it++)
{
cliaddr.sin_family = AF_INET;
inet_aton(inet_ntoa(it->addr.sin_addr),&cliaddr.sin_addr);
cliaddr.sin_port = htons(it->udp_port);
n=sendto(sockfd,dataToSend,sizeof(dataToSend),0,(struct sockaddr *)&cliaddr,len);
cout<<"number of bytes send by udp: "<< n << endl;
printf("SEND this message %d : %s to %s :%d \n",n,dataToSend,inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
}
}
}
Je vérifie la valeur de sizeof (dataTosend) et il est à peu près comme prévu-à-dire mille à savoir la taille du tampon. Est-ce que vous voyez une faille? Toute l'aide à cet égard sera appréciée. Merci!
vous devez envoyer octets dataRead, pas sizeof (dataToSend), mais il devrait fonctionner tout de même (vous obtenez des ordures, mais ce n'est pas un problème de socket). Avez-vous vérifié que cliaddr est ce que vous attendez? – garph0