probleme read write serveur/client
bjr,
voila je doi realiser un serveur/client en tcp et pour le moment je voudrai deja essayer que le client enoye la date et l'heure au serveur puis que le serveur l'affiche.
j'utilise les methodes read et write mais le probleme est que le serveur affiche le message en boucle, voici le code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define MASOCKET 1200
#define MAX 512
main(){
char buff[MAX];
time_t tics;
int sock;
struct sockaddr_in serv_addr;
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("193.50.49.96");
serv_addr.sin_port = htons(MASOCKET);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("Client->can't open stream socket");
exit(1);
}
if (connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
perror("Client->can't connect to server");
exit(1);
}
tics = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&tics));
if (write(sock, buff, strlen(buff)) < 0){
perror("write error");
exit(1);
}
close(sock);
exit(0);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <arpa/inet.h>
#define MASOCKET 1200
main(){
int sock, newsock, childpid;
struct sockaddr_in serv_addr, client_addr;
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0){
perror("Serveur->Socket error");
exit(1);
}
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(MASOCKET);
if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){
perror("Serveur->Bind error");
exit(1);
}
if(listen(sock, 9) < 0){
perror("Serveur->Listen error");
exit(1);
}
while(1){
perror("bbb");
newsock = accept(sock, (struct sockaddr *) NULL, NULL);
if (newsock < 0){
perror("Server->Accept error");
exit(1);
}
if ( (childpid = fork()) < 0){ //echec création du fils
perror("Serveur->Fork error");
exit(1);
}
else if (childpid == 0){ //on est dans le fils
close(sock);
perror("aaa");
ecoute(newsock);
exit(0);
}
close(newsock);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
#define MAX 512
ecoute(sock)
int sock;
{
char recvline[MAX];
int n;
while(1){
while((n = read(sock, recvline, MAX)) > 0)
recvline[n]=0;
if (fputs(recvline, stdout) == EOF){
perror("fputs error");
exit(1);
}
}
} |
avez vous uhne idée merci