[SOCKET] TCP client/serveur
j'aimerai implimenter un code source en c sous linux en utilisant les socket de façon a crée un client/serveur qui s'échange des fichiers
voici mon programme (soit il ne marche pas ou bien je ne sait pas comment le faire marcher ,mais je n'ai pas traiter l'échange des fichier j'ai juste volu des échange des message mais je ne sais pas comment m'y prendre )
coté server:
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
| int main(int argc,char * argv[])
{
int sock,sock_ecoute;
struct sockaddr_in serveur={0},csin={0};
int taille,lengeur_inet;
int nbr_ecoute=5;
char buf[1025];
if (argc!=1) printf("MSG");
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock==-1) msg_erreur("Creation de la socket a echouer");
serveur.sin_family=AF_INET;
serveur.sin_port=htons(PORT);
serveur.sin_addr.s_addr=htonl(INADDR_ANY);
if (bind(sock,(struct sockaddr *)&serveur,sizeof(serveur))==-1) msg("attachement de socket a echouer",sock);
listen (sock,nbr_ecoute);
lengeur_inet=sizeof (struct sockaddr_in);
while (1)
{
int resc=(int) sizeof csin;
sock_ecoute=accept(sock_ecoute,(struct sockaddr *) & csin,& resc);
taille=recv(sock,& buf,sizeof(buf),0);
buf[taille]='\0';
printf("%s",buf);
}
printf("une connection est accepter %d,from %s :%d\n",sock_ecoute,inet_ntoa(csin.sin_addr),htons (csin.sin_port));
} |
coté client
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
| int main(int argc,char * argv[])
{
int sock,bin,conecter;
char msg_envoyer[1025];
char buf[1025];
struct sockaddr_in local , serveur;
int lg,taille;
char car;
struct hostent *h=gethostbyname(argv[1]);
sock=socket(AF_INET,SOCK_STREAM,0);
//la création de la socket a echoue//
if (sock==-1) msg_erreur("Creation de la socket a echouer");
//local
local.sin_family=AF_INET;
local.sin_port=htons(0);
local.sin_addr.s_addr=htonl(INADDR_ANY);
/*attachement de la socket*/
// si attachement de la socket a echoue//
if (bind(sock,(struct sockaddr *)&local,sizeof(struct sockaddr))==-1) msg("attachement de socket a echouer",sock);
//serveur
serveur.sin_family=AF_INET;
serveur.sin_port=htons(atoi(argv[2]));
bcopy(h->h_addr,(char*)& serveur.sin_addr.s_addr,h->h_length);
lg=sizeof(serveur);
/*la connection au serveur*/
if (connect(sock,&serveur,lg)==-1) msg("connection:failed\n",sock);
printf(" TRING : %s.....\n ",inet_ntoa(serveur.sin_addr));
/*envoyer le msg*/
taille=send(sock,"BONJOUR",strlen("BONJOUR"),0);
if (taille==-1) msg("msg non envoyer",sock);//echec d'envoye
/*reception de la reponce (serveur)*/
while(1)
{
taille=recv(sock,& buf,sizeof(buf),0);
buf[taille]='\0';
printf("%s",buf);
if ((taille==0)||(recv==-1)) break;
}
printf("\n");
/*deconnection*/
printf("connection:close\n");
close(sock);
return 0;
} |
sachant que msg et msg_erreur se sont deux procedure pour afficher le message d'erreur
bien sur j'ai utiliser les header
Code:
1 2 3 4 5 6 7
| #include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h> |
merci de m'aider et j'aimerai bien savoir comment les éxecuter
bonne journée