A voir également:
- Programmation des sockets sous windows
- Clé windows 10 gratuit - Guide
- Montage video windows - Guide
- Windows ne démarre pas - Guide
- Programme demarrage windows 10 - Guide
- Windows 10 gratuit - Accueil - Mise à jour
9 réponses
Salut,
Si cette boucle existe à partir de for(;;),je te fais voir le programme en entier:
#include <stdio.h>
#include <sys/types.h>
#include <windows.h>
#include <winsock.h>
#define bufsize 50
#pragma comment(lib, "wsock32.lib")
/*This function is called when a system call fails*/
void error(char *msg)
{
perror(msg);
exit(1);
}
/*sockfd and newsockfd are file descriptors,portno stores the port number on which
the server accepts connections,clilen stores the size of the address of the client,
and n contains the number of characters read or written*/
int main(void)
{
int sockfd,newsockfd,clilen,n,threadID;
char *ch;
unsigned char buffer[bufsize];
struct sockaddr_in serv_addr,cli_addr;
WSADATA WSAData; //data for socket lib initialisation
WSAStartup(MAKEWORD(2,0),&WSAData);
/*The socket() system call creates a new socket*/
sockfd = socket(AF_INET,SOCK_STREAM,0);
if (sockfd < 0)
error("ERROR opening socket");
memset((char *) &serv_addr,0, sizeof(serv_addr)); //clear our address
serv_addr.sin_family =AF_INET;
serv_addr.sin_port = htons(3000);
serv_addr.sin_addr.s_addr = INADDR_ANY;
/*bind the socket to the internet address*/
if (bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){
closesocket(sockfd);
return(INVALID_SOCKET);
}
/*The listen system call allows the process to listen on the socket for connections*/
listen(sockfd,3);
//la boucle commence ici
for(;;){
clilen=sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0){
fprintf(stderr,"Error waiting for new connection!\n");
exit(1);
}
strncpy(buffer,"",bufsize);
n= recv(newsockfd,buffer,bufsize,0);
if (n<0)
error("ERROR reading from socket");
printf("The values received are:%s\n", buffer);
printf("\n");
printf("Temperature\t");
printf("Pressure\t");
printf("Humidity\n");
printf("\n");
//here I break the content of the buffer into pieces
ch=strtok(buffer,"x");
while (ch!=NULL)
{
printf("%s\t",ch);
ch = strtok(NULL," x");
}
printf("\n");
printf("\n");
n= send(newsockfd,"I got your values",18,0);
if (n<0) error("ERROR writing to socket");
}
printf("This is the end of transmission");
closesocket(newsockfd);
WSACleanup();
return 0;
}
Merci
Si cette boucle existe à partir de for(;;),je te fais voir le programme en entier:
#include <stdio.h>
#include <sys/types.h>
#include <windows.h>
#include <winsock.h>
#define bufsize 50
#pragma comment(lib, "wsock32.lib")
/*This function is called when a system call fails*/
void error(char *msg)
{
perror(msg);
exit(1);
}
/*sockfd and newsockfd are file descriptors,portno stores the port number on which
the server accepts connections,clilen stores the size of the address of the client,
and n contains the number of characters read or written*/
int main(void)
{
int sockfd,newsockfd,clilen,n,threadID;
char *ch;
unsigned char buffer[bufsize];
struct sockaddr_in serv_addr,cli_addr;
WSADATA WSAData; //data for socket lib initialisation
WSAStartup(MAKEWORD(2,0),&WSAData);
/*The socket() system call creates a new socket*/
sockfd = socket(AF_INET,SOCK_STREAM,0);
if (sockfd < 0)
error("ERROR opening socket");
memset((char *) &serv_addr,0, sizeof(serv_addr)); //clear our address
serv_addr.sin_family =AF_INET;
serv_addr.sin_port = htons(3000);
serv_addr.sin_addr.s_addr = INADDR_ANY;
/*bind the socket to the internet address*/
if (bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){
closesocket(sockfd);
return(INVALID_SOCKET);
}
/*The listen system call allows the process to listen on the socket for connections*/
listen(sockfd,3);
//la boucle commence ici
for(;;){
clilen=sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0){
fprintf(stderr,"Error waiting for new connection!\n");
exit(1);
}
strncpy(buffer,"",bufsize);
n= recv(newsockfd,buffer,bufsize,0);
if (n<0)
error("ERROR reading from socket");
printf("The values received are:%s\n", buffer);
printf("\n");
printf("Temperature\t");
printf("Pressure\t");
printf("Humidity\n");
printf("\n");
//here I break the content of the buffer into pieces
ch=strtok(buffer,"x");
while (ch!=NULL)
{
printf("%s\t",ch);
ch = strtok(NULL," x");
}
printf("\n");
printf("\n");
n= send(newsockfd,"I got your values",18,0);
if (n<0) error("ERROR writing to socket");
}
printf("This is the end of transmission");
closesocket(newsockfd);
WSACleanup();
return 0;
}
Merci
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
19 mai 2006 à 19:51
19 mai 2006 à 19:51
Si tu pouvais donner le bour du programme ou ca coince on pourra déjà voir ce qui ne va pas. sinon on ne sait pas ce que tu as fait.
Salut,
le bout du programme serveur:
listen(sockfd,3);
for(;;){
clilen=sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0){
fprintf(stderr,"Error waiting for new connection!\n");
exit(1);
}
strncpy(buffer,"",bufsize);
n= recv(newsockfd,buffer,bufsize,0);
if (n<0)
error("ERROR reading from socket");
printf("The values received are:%s\n", buffer);
printf("\n");
printf("Temperature\t");
printf("Pressure\t");
printf("Humidity\n");
printf("\n");
//here I break the content of the buffer into pieces
ch=strtok(buffer,"x");
while (ch!=NULL)
{
printf("%s\t",ch);
ch = strtok(NULL," x");
}
printf("\n");
printf("\n");
n= send(newsockfd,"I got your values",18,0);
if (n<0) error("ERROR writing to socket");
}
printf("This is the end of transmission");
closesocket(newsockfd);
WSACleanup();
return 0;
}
Merci d´avance
le bout du programme serveur:
listen(sockfd,3);
for(;;){
clilen=sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0){
fprintf(stderr,"Error waiting for new connection!\n");
exit(1);
}
strncpy(buffer,"",bufsize);
n= recv(newsockfd,buffer,bufsize,0);
if (n<0)
error("ERROR reading from socket");
printf("The values received are:%s\n", buffer);
printf("\n");
printf("Temperature\t");
printf("Pressure\t");
printf("Humidity\n");
printf("\n");
//here I break the content of the buffer into pieces
ch=strtok(buffer,"x");
while (ch!=NULL)
{
printf("%s\t",ch);
ch = strtok(NULL," x");
}
printf("\n");
printf("\n");
n= send(newsockfd,"I got your values",18,0);
if (n<0) error("ERROR writing to socket");
}
printf("This is the end of transmission");
closesocket(newsockfd);
WSACleanup();
return 0;
}
Merci d´avance
je suis pas sur de bien tout voir dans la globalité mais il me semble qu'il n'y a pas de boucle de repiquage dans le programme pour recevoir de nouvelles données via la socket client.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci arth,
J´ai pu enfin créer un autre loop qui me permet de recevoir les données d´un même client autant de fois que je voudrais.Cependant je desire aussi recevoir simultanement les données de plus d´un client et ne sais pas vraiment comment m´y prendre.
J´ai appris que je pouvais me servir de la fonction CreateThread(), mais malheureusement, je n´ai pas trouver assez d´infos pour pouvoir bien l´utiliser et où dans mon programme.
Merci de me repondre.
J´ai pu enfin créer un autre loop qui me permet de recevoir les données d´un même client autant de fois que je voudrais.Cependant je desire aussi recevoir simultanement les données de plus d´un client et ne sais pas vraiment comment m´y prendre.
J´ai appris que je pouvais me servir de la fonction CreateThread(), mais malheureusement, je n´ai pas trouver assez d´infos pour pouvoir bien l´utiliser et où dans mon programme.
Merci de me repondre.
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
20 mai 2006 à 04:42
20 mai 2006 à 04:42
Ui en effet tu peux utiliser la fonction create thread bin utile. je cherche et je te dis
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
20 mai 2006 à 14:32
20 mai 2006 à 14:32
voila j'ai trouvé ce lien :
https://khayyam.developpez.com/articles/cpp/multithreads/
je cherche si j'ai encore le source de mon serveur multithread c++
https://khayyam.developpez.com/articles/cpp/multithreads/
je cherche si j'ai encore le source de mon serveur multithread c++