1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
// ********************************************************
// LAFonction
// ********************************************************
__declspec(dllexport) void LAfonction(char *ip_adr, unsigned short port){
int prob;
pthread_t thread;// On crée un thread
//Step = 0 -> Initialisation + connection.
if(step == 0){
prob = connection(ip_adr, port);
if(prob == 0)
step = 1;
if(prob == 1)
step = 3;
}
//Step = 1 -> Recuperer tout les parametres.
if(step == 1){
}
//Step = 2 -> Envoyer et recevoir des données normalement.
if(step == 2){
}
//Step = 3 -> Deconnection.
if(step == 3){
close();
}
/*
//Step = 4 ->
if(step == 4){
printf("ByeBye");
}
*/
}
// ********************************************************
// Fonctions Connection
// ********************************************************
int connection(char *ip_adr, unsigned short port){
int prob;
// Initialisation de Winsock
erreur = WSAStartup(MAKEWORD(2,2), &initialisation_win32);
if (erreur != 0){
printf("\nJe ne peux pas initialiser Winsock du a l'erreur : %d %d", erreur, WSAGetLastError());
prob = 1;
stepCon = 1;
}
else
printf("\nWSAStartup : OK");
// Ouverture d'une Socket
idSocket = socket(AF_INET, SOCK_STREAM, 0);
if (idSocket == INVALID_SOCKET){
printf("\nJe ne peux pas creer la socket du a l'erreur : %d", WSAGetLastError());
prob = 1;
stepCon = 2;
}
else
printf("\nSocket : OK");
// Etablissement de l'ouverture de session
infoServeur.sin_family = AF_INET;
infoServeur.sin_addr.s_addr = inet_addr(ip_adr); // Indiquez l'adresse IP de votre serveur
infoServeur.sin_port = htons(port); // Port écouté du serveur
erreur = connect(idSocket, (struct sockaddr*)&infoServeur, sizeof(infoServeur));
if (erreur != 0){
printf("\nJe n'ai pas pu ouvrir la session TCP : %d %d", erreur, WSAGetLastError());
prob = 1;
stepCon = 3;
}
else{
printf("\nConnect : OK");
prob = 0;
stepCon = 4;
}
return prob;
}
// ********************************************************
// Fonctions Send
// ********************************************************
int sending(char *buffer){
nbCaractere = send(idSocket, buffer, strlen(buffer), 0);
if (nbCaractere == SOCKET_ERROR){
printf("\nJe n'ai pas envoyer les donnees du a l'erreur : %d", WSAGetLastError());
return 1;
}
else{
printf("\nSend : OK");
return 0;
}
}
// ********************************************************
// Fonction Receive
// ********************************************************
void receive(void){
nbCaractere = recv(idSocket, recbuf, sizeof(recbuf)-1, 0);
if (nbCaractere==SOCKET_ERROR){
printf("\nJe n'ai pas recu de donnee");
}
else{
recbuf[nbCaractere]='\0'; // Permet de fermer le tableau après le contenu des data, car la fonction recv ne le fait pas
printf("\nReceive : OK");
}
}
// ********************************************************
// Fonctions Close
// ********************************************************
void close(void){
// Fermeture de la session TCP Correspondant à la commande connect()
if(stepCon == 3 || stepCon == 4){
erreur = shutdown(idSocket, 2); // 2 signifie socket d'émission et d'écoute
if (erreur != 0){
printf("\nJe ne peux pas fermer la session TCP du a l'erreur : %d %d", erreur, WSAGetLastError());
}
else{
printf("\nShutdown : OK");
}
}
// Fermeture de la socket correspondant à la commande socket()
if(stepCon == 2 || stepCon == 4){
erreur = closesocket(idSocket);
if (erreur != 0){
printf("\nJe ne peux pas liberer la socket du a l'erreur : %d %d", erreur, WSAGetLastError());
}
else{
printf("\nClosesocket : OK");
}
}
// Quitte proprement le winsock ouvert avec la commande WSAStartup
if(stepCon == 1 || stepCon == 4){
erreur = WSACleanup(); // A appeler autant de fois qu'il a été ouvert.
if (erreur != 0){
printf("\nJe ne peux pas liberer winsock du a l'erreur : %d %d", erreur, WSAGetLastError());
}
else{
printf("\nWSACleanup : OK");
}
}
} |