CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Programmation Internet

ackeur
ackeur
Niveau 8
25 mai 2004 à 19:59:21

il faut que tu fasses un autre sock pour la réception des données, et que tu initialises une nouvelle structure sockaddr
ensuite tu lui assignes une adresse locale avec bind() ( obligatoire pr reçevoir des connexions), tu la mets en écoute avec listen(), puis tu gères les connexions avec accept() et là tu px reçevoir tes données

cf. http://www.frameip.com/c_mode_non_connecte/

CYBER_BOB
CYBER_BOB
Niveau 10
25 mai 2004 à 20:31:55

ton truc ne marche pas

CYBER_BOB
CYBER_BOB
Niveau 10
25 mai 2004 à 20:33:43

ackeur < < j´ai besoin d´utiliser bind, meme si j´utilise le protocole UDP?

ackeur
ackeur
Niveau 8
25 mai 2004 à 21:13:08

en mode non connecté ( => udp) seul le bind est nécessaire
dans tous les cas tu dois forcément avoir une socket client et une socket serveur

va sur le lien que je t´ai donné il y a des exemples de codes sources

@+

JeanYvesYves
JeanYvesYves
Niveau 10
26 mai 2004 à 01:02:09

aitonfrere :
j´avais mis le [4] en regardant sa définition en plein milieu :

char transmit_ok[5];

mais c´est vrai que ça change de la 1ere :)

CYBER_BOB
CYBER_BOB
Niveau 10
26 mai 2004 à 18:46:59

voici mon code:

/ *****************************/
/ * Console T´Chat */
/ * -------------- */
/ * Programme de dialogue... */
/ *****************************/

/ / insertion des headers

  1. include < stdio.h>
  2. include < winsock2.h>
  3. include < windows.h>
  4. include < string.h>

/ / variables globales
WSADATA wsa;
SOCKET sock;
SOCKADDR_IN sin;

/ / fonction d´initialisation des socket
void init_socket()
{
char add_ip[15]; / / variable pour stocker l´adresse IP

WSAStartup(MAKEWORD(2, 0), &); / / init winsock

// demande de l´adresse IP du correspondant
printf(" Entrez l´addresse IP du correspondant : " );
scanf("%s", add_ip);

sin.sin_family = AF_INET; / / socket internet
sin.sin_addr.s_addr = inet_addr(add_ip); / / adresse IP de communication
sin.sin_port = htons(666); / / port utilisé

sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); / / protocole UDP
bind(sock, ( SOCKADDR*)&, sizeof(sin)); / / propriété du socket

return;
}

/ / debut de transmission
void begin_transmit()
{
// definition de variable
char transmit_ok[5];
int confirm = 0;

printf("Tapez ok : " );
scanf("%s", transmit_ok);

while(confirm ! = 1)
{
sendto(sock, transmit_ok, sizeof(transmit_ok), 0, ( SOCKADDR*)&, sizeof(sin));
recvfrom(sock, transmit_ok, sizeof(transmit_ok), 0, ( SOCKADDR*)&, sizeof(sin));

if(strcmp(transmit_ok, " ok") == 0) / / si on reçoit le message
confirm = 1; / / on sort de la boucle
}

memset(transmit_ok, 0, sizeof(transmit_ok));

return;
}

/ / fonction pour le chat
void chat()
{
char reception[100];
char envoie[100];

while(1)
{
printf("Tape : " );
scanf("%s", envoie);
sendto(sock, envoie, sizeof(envoie), 0, ( SOCKADDR*)&, sizeof(sin));
recvfrom(sock, reception, sizeof(reception), 0, ( SOCKADDR*)&, sizeof(sin));
printf("%s", reception);
}

return;
}

/ / fonction principale du programme
int main()
{
printf("Console T´Chat\n");
printf("--------------\n\n");

init_socket(); / / initialise les sockets
begin_transmit(); / / commence la transmission

chat(); / / chat

return 1;
}

tout marche normalement sauf la fonction " void chat()", ca m´enerve parce que la je comprend vraiment pas pkoi ca marche pas ! !!

Altonfrere
Altonfrere
Niveau 10
26 mai 2004 à 20:23:14

ca marche pas a quel niveau ? a la compilation tu as des erreurs ? ( moi oui..)

ca vient des appels à la fonction recvfrom, le dernier paramètre n´est pas celui que tu as mis mais faut mettre l´adresse d´une variable pour recevoir la taille des données recues :

par exemple :

int size;
. ..
recvfrom(sock, transmit_ok, sizeof(transmit_ok), 0, ( SOCKADDR*)&, &);

CYBER_BOB
CYBER_BOB
Niveau 10
26 mai 2004 à 21:26:20

moi aucun probleme pour la compilation... c´est dans l´execution du code en fait... car kan j´envoie un message bah la reception c´est plein de signe bisard ! !!

Altonfrere
Altonfrere
Niveau 10
26 mai 2004 à 21:46:31

bizarre pour la compil . ..

si tu as plein de caractères bizarre c´est parceque tu affiches ce qu´il y a dans reception même si tu n´as rien recu. Par défaut ton tableau contient n´importequoi ( tu devrais faire reception[0] = 0, ou avant chaque recvfrom par sécurité...

sinon tu as un exemple de chat utilisant les sockets :

http://www.codeproject.com/internet/lantalk.asp#xx112333xx

ackeur
ackeur
Niveau 8
26 mai 2004 à 21:54:07

. ..
int sock_recv;
struct sockaddr_in serveur;
sock_recv = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_recv<0) { perror("socket"); exit(-1); }
. ..
serveur.sin_family = AF_INET;
serveur.sin_addr = INADDR_ANY;
serveur.sin_port = htons ( 666);
. ..

if(bind(sock_recv,(SOCKADDR*)&,sizeof(serve
ur))<0) { perror("bind");exit(-1); }
. ..
sendto(sock, transmit_ok, sizeof(transmit_ok), 0, ( SOCKADDR*)&, sizeof(sin));
. ..
recvfrom(sock_recv, transmit_ok, sizeof(transmit_ok), 0, ( SOCKADDR*)&, sizeof(serveur));
. ..

CYBER_BOB
CYBER_BOB
Niveau 10
27 mai 2004 à 17:04:18

ok je vais regarder de ce coté la, merci beaucoup ! !!

CYBER_BOB
CYBER_BOB
Niveau 10
28 mai 2004 à 22:24:07

void chat()
{
char reception[100];
char envoie[100];

while(1)
{
printf("Tape : " );
scanf("%s", envoie);
sendto(sock, envoie, sizeof(envoie), 0, ( SOCKADDR*)&, sizeof(sin));
recvfrom(sock, reception, sizeof(reception), 0, ( SOCKADDR*)&, sizeof(sin));
printf("%s", reception);
}

return;
}

voici une partie de mon programme qui pose probleme... et qui m´affiche les caracteres bizare, mais ca ne peut pas etre a cause de mon tableau qui n´est pas vide parce que pour afficher ce qu´il y a dans mon tableau, bah j´attend justement de recevoir quelque chose ! !!

ackeur
ackeur
Niveau 8
29 mai 2004 à 01:43:07

il te faut nécessairement une partie client et une partie serveur, ici on a juste un client qui tente de dialoguer avec lui-même, pas étonnant que ça ne fonctionne pas !

CYBER_BOB
CYBER_BOB
Niveau 10
29 mai 2004 à 08:07:23

en fait ce que j´essayé de faire c´est un programme de chat qui fasse en meme temps client et serveur... donc d´apres toi je mis prend mal? faudrait il que je code le serveur dans un thread de mon programme?
donc je vais tout recommencé, aurrais-tu des conseils a me donné?

ackeur
ackeur
Niveau 8
29 mai 2004 à 18:55:28

oui, ou sinon tu peux les programmer séparement ( un prog qui fait serveur, l´autre qui fait client)
ça ne devrait pas poser problème, en revanche
si tu vx que le serveur puisse gérer plusieurs clients tu devras utiliser select()

http://bremardt.free.fr/cfr/c/Prog_reseau_splendeur.pdf

a+

CYBER_BOB
CYBER_BOB
Niveau 10
02 juin 2004 à 21:46:38

bon j´ai recommencé entierement le programme, mais il ne marche toujours pas ! !! alors j´ai mi un zip sur le net pour que vous puissiez jeter un coup d´oeil au code et me dire ce qui ne va pas:

http://perso.wanadoo.fr/raven-corporation/console_chat.zip

voila merci par avance...
Bob

CYBER_BOB
CYBER_BOB
Niveau 10
06 juin 2004 à 20:33:57

:up:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment