begin process at 2012 05 30 17:17:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[socket et api win]recevoir et envoyer en meme temps


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[socket et api win]recevoir et envoyer en meme temps

mercredi 21 décembre 2005 à 23:39:03 | [socket et api win]recevoir et envoyer en meme temps

shadow1779

Membre Club
Bonjour je me suis fais un petit programme irc qui me servira de bot pour auto-op des personne ou d'autre taches diverses, le client aura une boite de dialogue ou il pourrai voir ce que les gens ecrivent et un editbox pour ecrire (voir design d'xchat en gros)

mon probleme est que je ne sais pas comment mettre ma partie reception, pour que le reste de mon prog ne soit pas ignoré et qu'il n'y est pas un blocage sur la boucle

//partie reception
while(1)
{
recv(sock, buffer, sizeof(buffer), 0);
MessageBox(NULL,buffer,NULL,0);

memset(buffer,0,sizeof(buffer));
}


//code complet san la partie reception (ceci est le debut du code, les fonctions du futures bot n'ont pas été encore faites

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "resource.h"

#define IRCIP "213.246.57.79"
#define PORT   4444
#define SALON "#code-fr"
#define NICK "Xperience"

#pragma comment(lib, "ws2_32.lib")

INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hinst;

int WINAPI WinMain(HINSTANCE Instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hinst,(LPCTSTR)IDD_DIALOG1, 0, DlgProc);
}

/******************************************************************************/
INT_PTR CALLBACK DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

char buffer[5000];

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr            = inet_addr(IRCIP);
sin.sin_family                = AF_INET;
sin.sin_port                = htons(PORT);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));


  switch (uMsg)
  {
  case WM_INITDIALOG:
      break;

    case WM_COMMAND:
 switch(wParam)
 {
 //envoi de texte
 case IDC_BUTTON1:
     send(sock, buffer, strlen(buffer), 0);
     break;

 }
 break;

  case WM_CLOSE:
  EndDialog(hwnd, 1);
  closesocket(sock);
   WSACleanup();
  break;
}
return 0;
}


.
jeudi 22 décembre 2005 à 00:02:03 | Re : [socket et api win]recevoir et envoyer en meme temps

vecchio56

Administrateur CodeS-SourceS
Pour eviter le blocage, tu peux utiliser un thread (CreateThread), mais je sais pas si tu pourra pour autant envoyer et recevoir en même temps, ca me semble un peu risqué d'entrelacer les deux
jeudi 22 décembre 2005 à 00:10:52 | Re : [socket et api win]recevoir et envoyer en meme temps

rrk275

(j'ettaye la reponse tres pertinente de vecchio..)
DWORD WINAPI tonnomdefonction( LPVOID lpParam )
{ // ta fonction ici
}
DWORD dwThreadId, dwThrdParam = 1;
    HANDLE hThread;

    hThread = CreateThread(
        NULL,                        // attribut de securité par defaut
        0,                           // taille de la pile par defaut
        tonnomdefonction,                  // notre function
        &dwThrdParam,                // l'argument pour la fonction
        0,                           // flag de creation par defaut
        &dwThreadId);                // retourne l'id du thread
{code pas totalement de moi...}
rrk275
jeudi 22 décembre 2005 à 00:13:24 | Re : [socket et api win]recevoir et envoyer en meme temps

rrk275

ah dsl
DWORD WINAPI tonnomdefonction( LPVOID lpParam )
{ // ta fonction ici
}
// appel du thread (donc dans une fonction... contrairement a ce qui precede qui est une fonction normale...)
DWORD dwThreadId, dwThrdParam = 1;
    HANDLE hThread;

    hThread = CreateThread(
        NULL,                        // attribut de securité par defaut
        0,                           // taille de la pile par defaut
        tonnomdefonction,                  // notre function
        &dwThrdParam,                // l'argument pour la fonction
        0,                           // flag de creation par defaut
        &dwThreadId);                // retourne l'id du thread

rrk275
jeudi 22 décembre 2005 à 00:16:39 | Re : [socket et api win]recevoir et envoyer en meme temps

shadow1779

Membre Club

oula les gars :D merci de votre aide mais c'est tres beaucoup du chinois, j'ai vu que tres vite fais ce qu'etait un thread et un process, donc en créer un la j"vien de voir mais apres comment l'exploiter,

quand a la lecture en meme temps que l'envoi on va dire qu'il y a vraiment moins d'une chance sur un milliard que l'user envoi dans buffer o moment meme ou buffer est recue ca tient du gain du loto, et pis bon j'vai tester on verra comment ca réagis

par contre si quelqu'un pouvait expliquer comment exploiter mon thread qui me servirai pour la lecture j'aurai appris un grand truc aujourdh'ui
jeudi 22 décembre 2005 à 00:18:59 | Re : [socket et api win]recevoir et envoyer en meme temps

vecchio56

Administrateur CodeS-SourceS
Au lieu d'appeler la fonction directement, tu le fais à travers CreateThread. C'est pareil, sauf que ca retourne directement (pas bloquant). Rien de plus a comprendre.
jeudi 22 décembre 2005 à 00:43:04 | Re : [socket et api win]recevoir et envoyer en meme temps

aardman

Membre Club
Salut,
Pour utiliser winsock quand on a une interface graphique, le mieux (avis personnel) c'est d'utiliser WSAAsyncSelect().
Mais il y a un serieux probleme dans ton code, si tu laisse le WSAStartup(), le socket() et le connect() tout en haut de ta DlgProc, tu risques d'avoir un serieux probleme de memory leak vu que une telle fonction est appelée plusieurs centaines de fois lors de l'execution de ton programme.



Cette discussion est classée dans : buffer, include, socket, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

client serveur [ par elanspeech ] Bonjour,Je suis en train de programmer un petit client serveur en C pour windows avec dev-c++. J'obtiens l'erreur suivante a la compilation : D:\DEV-C Problème de Socket(recv) [ par YnOThAr ] Voila je suis en train d'essayer de faire un client FTp mais j'ai vraiment du mal...mon preblème c ke j'arrive pas à réceptionner les réponses du serv link avec GCC [ par mrjulien ] Bonjours a tous.Je compile avec gcc sous windows (grâce a mingw). Je ne souhaite pas vous ennuyer en créant un topic redondant, mais je n'arrive pas à Socket Server/Client [ par XKaliBur ] Je suis débutant et je voudrais faire en sorte d'envoyer un message au mon serveur et des que ce dernier reçoit un message, il réponde en fonction de [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l Socket en C [ par RM50Man ] WSADATA ws;                    WSAStartup(MAKEWORD(2,0), &ws);              &n Socket C et api [ par shadow1779 ] Bonjour,j'ai un petit prob avec un bot que j'essai de faire avec l'api et les sockets en C, pour l'instant on ne peux que cliquer sur le bouton connec probleme de communication entre deux programme [ par smook ] re salut le dernier message que j ai poster c etait pour les socket et la librairie "libwsock.a" mais sayer j ai passer cette etape j ai reussi a fair pb de compilation (prog utilisant un socket) [ par smook ] boujour a tous bon je vais commencer part bien vous detailler ce qui a detailler : j utilise dev c++ 4.9.9.2 et mon ^programme a pour but d ecouter un Probléme pour lire le buffer au lancement de la connexion [ par logant83 ] Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales