[C] Socket Client-Serveur -> Write() + Read() - sakiir - 15-03-2013
Hello alors je partage mon code .
systeme de client-Serveur en C donc , assez simple .
j'obtient un truc assez louche , si quelqun a une idée ? :')
server.c :
Code : #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 5555
#define IP "192.168.0.19"
int main(int argc,char **argv)
{
char buf[1024];
int server_socket;
struct sockaddr_in server_name;
int client_socket;
printf("[*] SOCKET CREATING ..\n");
if(-1 == (server_socket = socket(PF_INET,SOCK_STREAM,0)))
{
/*
Echec de Socket()
*/
}
printf("[*] MEMORY INITIALIZING..\n");
/* Initiation De l'espace memoir de la socket */
memset( (char *) &server_name,0, sizeof server_name);
server_name.sin_family = AF_INET;
server_name.sin_port = htons(PORT);
printf("[*] IP CONVERTING..\n");
if(0 == inet_aton(IP,&(server_name.sin_addr)))
{
/*
Echec de la convertion de l'adresse IP
*/
}
printf("[*] NAME GIVING..\n");
/*Attribution d'un nom*/
if(-1 ==
(bind
(server_socket,
(struct sockaddr *) &server_name,
sizeof server_name)))
{
/*
Echec de l'attributioon d'un nom à la socket
*/
}
printf("[*] LISTENNING..\n");
/*Socket En Ecoute ..*/
if(-1 == (listen(server_socket,0)))
{
/*
Echec De l'ecoute ..
*/
}
if(-1 == (client_socket = accept(server_socket,NULL,0)))
{
/*
Ipossible d'attribuer un ID a la socket du client connecté.
*/
}
printf("[+] CONNECTED !\n");
printf("[+] READING MESSAGE\n");
if(-1 == read(client_socket,buf,1000)){
printf("[-] FAILED TO READ() .. \n");
exit(1);
}
printf("[+] MESSAGE RECEIVED : %s\n",buf);
/* Fermeture de la socket du client */
shutdown(client_socket,2);
close(client_socket);
/* Fermeture de la socket du serveur */
shutdown(server_socket,2);
close(server_socket);
}
client.c
Code : #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IP "192.168.0.19"
#define PORT 5555
int main(int argc,char **argv)
{
if(argc != 2){
printf("Usage : %s <messagetoSend>\n",argv[0]);
exit(0);
}
char tosend[1024];
int taille = strlen(tosend);
strncpy(tosend,argv[1],1023);
int client_socket;
struct sockaddr_in sin;
if(-1 == (client_socket = socket(PF_INET,SOCK_STREAM,0)))
{
printf("[-] socket() FAILED\n");
/*
Echec de la creation de la socket
*/
exit(1);
}
/*Initiation de la memoire de la structure*/
memset((char *) &sin, 0, sizeof sin);
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
if(0 == inet_aton(IP,&(sin.sin_addr)))
{
printf("[-] inet_aton() FAILED\n");
/*
Echec de la convertion de l'IP
*/
exit(1);
}
if(-1 == (connect(client_socket,(struct sockaddr *) &sin,sizeof sin)))
{
printf("[-] Connect() Failed (Maybe server is not running..)\n");
/*
Echec de la connexion !
*/
exit(1);
}
printf("[+] CONNECTED !\n");
/*On est connecté !*/
printf("[*] SENDING : %s \n",tosend);
if( -1 == write(client_socket,tosend,strlen(tosend)))
{
printf("[-] FAILED TO SEND : %s\n",tosend);
exit(1);
}
printf("[+] %s WAS SENT\n",tosend);
shutdown(client_socket,2);
close(client_socket);
}
output ./server :
Code : [13:37 sakiir@sakiir socket] > ./server
[*] SOCKET CREATING ..
[*] MEMORY INITIALIZING..
[*] IP CONVERTING..
[*] NAME GIVING..
[*] LISTENNING..
[+] CONNECTED !
[+] READING MESSAGE
[+] MESSAGE RECEIVED : message���|� // ICI :')
output ./client "message" :
Code : [13:32 sakiir@sakiir socket] > ./client "message"
[+] CONNECTED !
[*] SENDING : message
[+] message WAS SENT
RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 15-03-2013
j'ai resolu tout seul le probleme , j'ai tout simplement mal utilisé la fonctione read()
Code : while(ret = read(client_socket,buf,1023))
{
buf[ret] = 0;
printf("[+] MESSAGE RECEIVED : %s\n",buf);
}
voila
RE: [C] Socket Client-Serveur -> Write() + Read() - Creepy_p0ney - 15-03-2013
voilà :p tu peux essayer avec send/recv aussi et puis tu peux essayer de créer un serveur multiclient, comme ça c'est plus rigolo comme on dit "plus on est de fous plus on rit"
RE: [C] Socket Client-Serveur -> Write() + Read() - InstinctHack - 15-03-2013
Si tu sait pas coment tourner ça, regarde sur le forum, j'ai un serveur multi-client en python. Faut simplement transcoder :')
RE: [C] Socket Client-Serveur -> Write() + Read() - supersnail - 15-03-2013
Ben pour le multiclients soit tu bourrines à coup de threads, soit tu utilises select (et là ça devient funky sous win32 :') )
RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 16-03-2013
supersnail : j'adore , le nombre de fois que j'ai vu win32 et funky se retrouver dans la meme phrase avec toi x)
RE: [C] Socket Client-Serveur -> Write() + Read() - EpicOut - 17-03-2013
faut vraiment s'appeler Conan le barbare pour le faire à coup de thread.
RE: [C] Socket Client-Serveur -> Write() + Read() - sakiir - 18-03-2013
(17-03-2013, 23h02)EpicOut a écrit : faut vraiment s'appeler Conan le barbare pour le faire à coup de thread.
euuuh ouai grave x)
|