[C] comment
Résolu
Laraby
-
ali -
ali -
Bonjour Svp je voudrais savoir comment utiliser le langage C pou écrire un programme qui connecte deux ordinateurs?Puis qu'est-ce que 'pipe'?Au secours et Merci d'avance!!laraby
4 réponses
programme de base:
CLIENT:
CLIENT:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#define PORT 20100
void main()
{
int sk,addrlen,nbr;
struct sockaddr_in myaddr;
char buffer[40];
struct hostent *host_addr;
char retour[] = "Message retour du client";
//creation socket
if((sk=socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("prog client erreur appel socket");
}
host_addr=gethostbyname("localhost");
myaddr.sin_addr.s_addr=((struct in_addr *)(host_addr->h_addr))->s_addr;
myaddr.sin_port=PORT;
// myaddr.sin_port=htons(PORT);
myaddr.sin_family=AF_INET;
//demande de connexion
addrlen=sizeof(struct sockaddr_in);
if(connect(sk,(struct sockaddr*)&myaddr,addrlen)==-1)
{
perror("prog client erreur appel connect");
return;
}
//reception donnees
if((nbr=read(sk,buffer,40))==-1)
{
perror("erreur appel read");
}
printf("buffer recu: %s\n",buffer);
//repond au serveur
if((nbr=write(sk, retour,strlen(retour)+1))==-1)
{
perror("erreur appel write");
}
if(close (sk)==-1)
{
perror("erreur appel close");
}
}
SERVEUR:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#define PORT 20100
void main(void)
{
int ls,sk,nbr;
struct sockaddr_in myaddr;
struct sockaddr_in remaddr;
char buffer[40];
unsigned int addrlen;
char message[]="Message du serveur";
if (( ls = socket(AF_INET, SOCK_STREAM, 0)) == -1 )
{
printf("erreur appel socket");
}
memset (&myaddr, 0, sizeof(myaddr));
myaddr.sin_port = PORT;
myaddr.sin_family = AF_INET;
if ( bind(ls,(struct sockaddr*)&myaddr, sizeof(struct sockaddr_in)) == -1)
{
perror("erreur bind");
}
if ( listen (ls,1) == -1 )
{
printf("erreur listen");
}
addrlen = sizeof(struct sockaddr_in);
if (( sk = accept(ls,(struct sockaddr*) &remaddr,&addrlen)) == -1 )
{
printf("erreur accept");
}
if ( (nbr=write(sk,message,strlen(message)+1)) == -1 )
{
printf("erreur write");
}
if (( nbr = read(sk,buffer,40)) == -1 )
{
printf("erreur read");
}
printf("j ai recu :%s \n",buffer);
close(sk);
if(close (sk)==-1)
{
perror("erreur appel close");
}
if(close (ls)==-1)
{
perror("erreur appel close");
}
}