Protocole UDP

Programmation d'applications complexes
Anonyme

Message par Anonyme »

J'ai découvert grace à toi le dossier librarySDK hier :oops:

Tu sais pour l'arborescence, tu m'aurait juste dit, "ton archive est mal organisé, faire des copier collé me casse les c..." j'aurais compris ausitot ^^ fallais pas te prendre la tête à refaire l'archive (maintenant que c'est fait je le garde :D merci.)
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Cpl.Bator a écrit :J'ai découvert grace à toi le dossier librarySDK hier :oops:

Tu sais pour l'arborescence, tu m'aurait juste dit, "ton archive est mal organisé, faire des copier collé me casse les c..." j'aurais compris ausitot ^^ fallais pas te prendre la tête à refaire l'archive (maintenant que c'est fait je le garde :D merci.)
Lol... pas de problème, c les vacances, et puis... les futilitées de ce genre, si je peux te les éviter, autant le faire. !:-D
Bon courage et merci encore. :-D
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

Message par popstatic »

Bonjour!

pourquoi en UDP?
Asus bien? asus tres bien!
Subelrim
Messages : 9
Inscription : lun. 03/avr./2006 23:34
Localisation : Caen

UDP

Message par Subelrim »

Bonsoir,

J'ai dl ton archive CPL.Bator, les EXE sont impecs mais les .pb me collent une erreur disant que opensocket( ) n'est pas une fonction.

je pense que j'ai pas bien placé la dll ? :oops:

si tu peux éclairer ma chtite lanterne, ce serait bien :wink:

J'ai commencé un prog multijoueurs en réseau mais tcp rame trop ! je voudrais bien essayer en udp (selon les conseils de Fred).
Et voila...
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

La version 4 gère l'UPD, ce qui fait que cette librairie me semble un peu obsolète.
J'ai pas dit que c'était mal fait !
Je dis juste que ça fait "il me semble" doublon.
Vive le thread-safe !
Subelrim
Messages : 9
Inscription : lun. 03/avr./2006 23:34
Localisation : Caen

Message par Subelrim »

bah oui mais même en lisant les infos UDP sur wiki , c'est un peu pauvre en exemples d'utilisation. :(
Et voila...
Anonyme

Message par Anonyme »

heureusement que je suis curieux, la notification automatique de fonctionne pas super :?

@popstatic : Car quand je l'ai faite, pb ne gerais pas l'UDP.

@Subelrim : je suis de l'avis de LeCyb, la lib est obselète. car avec la bêta 4 il est possible de choisir le mode. Quand à la rapidité du Tcp/ip, je ne vois pas ou tu peut avoir de gros problèmes, a mon avis sans vouloir te vexé, tu dois mal gerer l'envois ou la reception des messages.
je ferais certainement un post la dessus :wink:

@++
Anonyme

Message par Anonyme »

D'ailleurs pour ceux que cela interesse voila la source en c++ :
je m'étais appuyer grâce à un site , mais j'ai plus le lien :?
il est facilement convertible en TCP/IP :D

Code : Tout sélectionner

//************************
//* WINSOCK FUNCTION UDP *
//************************

//Includes
#include <winsock2.h> // pour les fonctions socket   

// Les librairies
#pragma comment(lib,"ws2_32.lib")

const float DLL_VERSION = 1.0;

//Declaration des Procédures
extern "C" __declspec(dllexport) int InitWinsock();
extern "C" __declspec(dllexport) int OpenSocket();
extern "C" __declspec(dllexport) int BindSocket(int Port,int socketid);
extern "C" __declspec(dllexport) char* ReceiveData(int socketid);
extern "C" __declspec(dllexport) int SendData(const char* data, const char* IpTo , int PortTo , int socketid);
extern "C" __declspec(dllexport) int CloseSocket(int socketid);
extern "C" __declspec(dllexport) int ExitWinsock();


// Définition des variables
WSADATA initialisation_win32; // Variable permettant de récupérer la structure d'information sur l'initialisation
int erreur; // Variable permettant de récupérer la valeur de retour des fonctions utilisées
int tempo; // Variable temporaire de type int
int nombre_de_caractere; // Indique le nombre de caractères qui a été reçu ou envoyé
char buffer[65535]; // Tampon contenant les données reçues ou envoyées
SOCKET id_de_la_socket; // Identifiant de la socket
SOCKADDR_IN information_sur_la_source;
SOCKADDR_IN information_sur_la_destination; // Déclaration de la structure des informations lié au serveur



//Initialisation de Winsock
__declspec(dllexport) int InitWinsock()
{
int InitStatus;   
 int Retour;                   

   InitStatus=WSAStartup(MAKEWORD(2,2),&initialisation_win32);  

if(InitStatus!=0)
 Retour=WSAGetLastError();
  else
   Retour=1;
    return Retour;                 
}

// Ouverture de la socket
__declspec(dllexport) int OpenSocket()
{
int Retour;                      
id_de_la_socket=socket(AF_INET,SOCK_DGRAM,0);

if (id_de_la_socket==INVALID_SOCKET)
 Retour = WSAGetLastError();
  else
   Retour = id_de_la_socket;
return Retour; 

}

//Lie le socket à un port pour l'écoute.
__declspec(dllexport) int BindSocket(int Port,int socketid)
{
int StartServer; 
int Retour;                     

information_sur_la_source.sin_family=AF_INET;
information_sur_la_source.sin_addr.s_addr=INADDR_ANY; // Ecoute sur toutes les IP locales  
information_sur_la_source.sin_port=htons(Port); // Ecoute sur le port 
StartServer=bind(socketid,(struct sockaddr*)&information_sur_la_source,sizeof(information_sur_la_source)); 

if (StartServer!=0)
 Retour=WSAGetLastError();
  else
   Retour=1;
return Retour;
}


//Reception de données
__declspec(dllexport) char* ReceiveData(int socketid)
{
            
tempo=sizeof(information_sur_la_source); // Passe par une variable afin d'utiliser un pointeur
nombre_de_caractere=recvfrom(socketid,buffer,1515,0,(struct sockaddr*)&information_sur_la_source,&tempo);
buffer[nombre_de_caractere]=0; // Permet de fermer le tableau après le contenu des data, car la fonction recvfrom ne le fait pas

return buffer;
}



__declspec(dllexport) int SendData(const char* data, const char* IpTo , int PortTo, int socketid)
{
int Retour;          
                      
information_sur_la_destination.sin_family=AF_INET; // Indiquez l'utilisation d'IPV4
information_sur_la_destination.sin_addr.s_addr=inet_addr(IpTo); // Indiquez l'adresse IP de votre serveur
information_sur_la_destination.sin_port=htons(PortTo); 
strcpy(buffer,data); // Copie la chaine de caractère dans buffer
nombre_de_caractere=sendto(socketid,buffer,strlen(buffer),0,(struct sockaddr*)&information_sur_la_destination,sizeof(information_sur_la_destination));


if (nombre_de_caractere==SOCKET_ERROR)
Retour = WSAGetLastError();
else
Retour = 1;
return Retour;                      
} 

// Fermeture de Winsock
__declspec(dllexport) int ExitWinsock()
{
int Exit; 
int Retour;
                     
	Exit=WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
	if (Exit!=0)
	Retour = 0;
	else
    Retour = 1;
return Retour;    
}

// Ferme le socket
__declspec(dllexport) int CloseSocket(int socketid)
{
int Close;   
int Retour;                   
     	
     Close=closesocket(socketid);

	if (Close!=0)
		Retour = WSAGetLastError();
	else
		Retour = 1;
return Retour;
}
Dernière modification par Anonyme le ven. 21/avr./2006 11:28, modifié 1 fois.
Subelrim
Messages : 9
Inscription : lun. 03/avr./2006 23:34
Localisation : Caen

Message par Subelrim »

j'ai passé l'âge de me vexer pour si peu :D (j'ai commencé à programmer sur Oric dès sa sortie et j'ai pondu quelques HIT il y a une vingtaine d'années... 8)

Il est probable que mon code comporte quelques erreurs ! Cependant, cela fait plusieurs mois que je refait complètement les routines clients serveur avec ou sans thread en épurant au maximum mais sans parvenir à la fluidité souhaitée. bref sa rame ...

Note que c'est beaucoup plus fluide que le code laissé par "le petit scarabaie :lol: " sur un post dans une autre rubrique network.

Dès que le temps me le permet, je dépose les routines de base sur lesquelles je sèche.
Et voila...
Répondre