C-Grand debutant, cherche tutos en C

Fermé
Nostaroth Messages postés 11 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 17 juillet 2010 - 20 juil. 2007 à 15:44
zabbi Messages postés 35 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 23 septembre 2007 - 21 juil. 2007 à 12:41
Voila j'aimerai pouvoir fair un tchat, je suis grand debutant en C j'ai fini d'aprendre tout ce qu'il y a sur le site du zero (sauf la partie C++) et je voudrai trouver un tuto pour m'aider a fair ce que je cherche, merci d'avance.

Et si vous avez quelque bon tuto pour que j'aprofondisse mes connaissance c'est pas mal aussi
=D

2 réponses

zabbi Messages postés 35 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 23 septembre 2007 4
20 juil. 2007 à 23:48
slt.

essaie de lire un peu sur les socket. car c'est la partie importante pour réaliser un chat

A+
0
Nostaroth Messages postés 11 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 17 juillet 2010 1
21 juil. 2007 à 12:09
oui, j'ai apris grand nombre de chose sur les socket, mais lorsque je fai un send(); le texte ne s'affiche pas sur le serveur
0
zabbi Messages postés 35 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 23 septembre 2007 4
21 juil. 2007 à 12:41
slt .
je vais t'envoyer un programme qui marche il permet d'envoyer un message et de recevoir aussi.

c en dommaine internet mode connecté.

il ya trois fichier : tcp.h

#include<sys/types.h>
#include<sys/socket.h>
#include<sys/param.h>
#include<string.h>
#include<sys/un.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<netdb.h>
#define PORT 2222
//12
void envoie(int,int*,char []);
struct sockaddr_in init_addr_c(void);
void reception(int,int*,char[]);
struct sockaddr_in init_addr(void);
void str_replace(char [],int);

struct sockaddr_in init_addr_c(void)
{
struct sockaddr_in addr2;
struct hostent *h;
char serveur[31];
bzero(&addr2,sizeof(addr2));
printf("L'adresse du serveur : ");
gets(serveur);
if((h=gethostbyname(serveur))==NULL)
perror("gethostbyname : ");
bcopy((char*)h->h_addr,(char*)&addr2.sin_addr,h->h_length);
//addr2.sin_family=h->h_addrtype;
addr2.sin_family=AF_INET;
addr2.sin_port=htons(PORT);
//addr2.sin_addr.s_addr=inet_addr(serveur);
return addr2;
}

struct sockaddr_in init_addr(void)
{
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr=INADDR_ANY;
return addr;
}

void reception(int acc,int* len,char msg[])
{
int nb;
nb=read(acc,len,sizeof(*len));
nb=read(acc,msg,*len);
msg[nb]='\0';
printf("lui :%s\n",msg);
printf("\n");
}

void envoie(int s,int* len,char msg[])
{
printf("Vous :");
gets(msg);
*len=strlen(msg);
write(s,len,sizeof(int));
write(s,msg,*len);
}
les deux autres fichiers : client
#include"tcp.h"
main()
{
int s,b,a,lg,acc,len,nb,len_addr;
char msg[100];
struct sockaddr_in addr2;
addr2=init_addr_c();
printf("sddd\n");
if((s=socket(AF_INET,SOCK_STREAM,0))==-1)
perror("erreur de creation\n");
else
{
printf("socket creee\n");
if(connect(s,(struct sockaddr*)&addr2,sizeof(addr2))==-1)
perror("connect ");
else
{
printf("Connection établie\n");
while(strcmp(msg,"quit"))
{
envoie(s,&len,msg);
reception(s,&len,msg);
}
}
}
close(s);
}


le troisieme: serveur:


#include"tcp.h"
#define PORT 5222

main()
{
int s,lg,acc,len;
char msg[100];
struct sockaddr_in addr,addr2;
addr=init_addr();
if((s=socket(AF_INET,SOCK_STREAM,0))==-1)
perror("erreur de creation\n");
else
{
lg=sizeof(struct sockaddr);
if(bind(s,(struct sockaddr*)&addr,sizeof(addr))==-1)
perror("bind :");
else
{
printf("je commence le listening\n");
if(listen(s,1)==-1)
perror("listen :");
else
{
lg=sizeof(struct sockaddr_un);
bzero(&addr2,sizeof(addr2));
if((acc=accept(s,(struct sockaddr*)&addr2,&lg))==-1)
perror("accept :");
else
{
printf("connection etablie\n");
while(strcmp(msg,"quit"))
{
reception(acc,&len,msg);
envoie(acc,&len,msg);
}
close(acc);
}
}
}
close(s);
}
}




a+;

essaie de l'executer aprés je t'envoyer la version finale avec les wizz, le choix des pseudo et tt

mais je dois le raffiner un peu.

a+
0