Problème : Socket et thread (communication automate)
Bonjour ,
Je suis actuellement entrain de concevoir une application pour pouvoir établir une connexion avec un scanner relié en réseau tcp/ip et afin de pouvoir récupérer des codes barres scanner.
J'utilise donc les sockets et thread pour réaliser se projet.
Mon scanner par défaut utilise un port : "2001" et une adresse IP : "192.168.1.118".
Le problème c'est que je voudrais créer une socket serveur qui serait mon scanner.
Mais lorsque je crée cette socket avec les adresses ip et port nécessaire, il me renvoie un code d'erreur (wsaeaddrnotavail).
Ma première étape serait de pouvoir créer la socket permettant une connexion entre mon poste et le scanner (serveur).
Je vous fourni mon code, pouvaient vous m'éclairer svp.
CODES Serveur :
Citation:
CServeur est une classe
PUBLIC
sNameSocket est une chaîne
iport est un entier
nbClient est un entiers
sEtatServeur est une chaîne
sEtatEnvoie est une chaîne
sCanal est une chaîne
sinfo est une chaîne
sip est une chaîne
FIN
//Création du socket
PROCEDURE PUBLIC CreeServer(sIdSocket,idport)
:sNameSocket=sIdSocket
:iport=idport
:sip = "192.168.1.118" "ip du scanner"
sIpTest est une chaîne = NetAdresseIP() //""Marche avec l'ip du poste""
Trace("Socket " ,:sNameSocket)
SI SocketCrée(:sNameSocket,:iport,:sip) = Faux ALORS
Erreur("Erreur création " + ErreurInfo(errMessage))
:sEtatServeur="Serveur Eteint ! "
SINON
:sEtatServeur="Serveur Démarré ! "
ThreadExécute("Thread1", threadNormal,Accepte)
Trace("Thread 1 exécuté")
Trace("Etat connexion server : ",:sEtatServeur)
//Acepte les connexions côtés Client
PROCEDURE PUBLIC Accepte()
BOUCLE
Trace("Attente-Connexion ------>")
SI SocketAttendConnexion(:sNameSocket,4000) ALORS
Trace("Demande du Client")
// Si la connexion est acceptée, la gestion de cette connexion est réalisée dans un thread spécifique
:sCanal = SocketAccepte(:sNameSocket)
ThreadExécute("Thread2"+DonneIdentifiant(), threadNormal, GereConnectClient) //Permet d'établir le lien avec le client
:nbClient++
FIN
Trace("Tread 1 ok ET nbClientEnCour ->",nbClient)
ThreadPause(100)
FIN
FIN
//Si connexion établie et accepter on gères les connexion :
PROCEDURE PUBLIC GereConnectClient() //Lecture / Ecriture des échanges!
bTest est un booléen
BOUCLE
bTest = Faux
SI(:sinfo<> "")ALORS
SI PAS SocketEcrit(:sCanal,:sinfo) ALORS
:sEtatEnvoie="Le message n'a pas était transmis"
SINON
:sEtatEnvoie="Le message à étais transmis avec succès"
bTest=Vrai
:sinfo=""
FIN
FIN
ThreadPause(200)
Trace("Thread 2 OK")
Trace("Envoie Donnée",bTest)
FIN
// + méthode déconnecter serveur..
CODES Client:
Citation:
Cclient est une classe
PUBLIC
sNameSocketClient est une chaîne
iport est un entiers
sdonne est une chaîne
sEtatConnect est une chaîne
sEtatEchange est une chaîne
sip est une chaîne
FIN
//Connexion géré dans un thread
PROCEDURE Connecter()
ThreadExécute("Threadc1",threadNormal,GereConnexion)
//Gerer les connexion entre le client et le serveur
PROCEDURE PUBLIC GereConnexion()
//:sIp = NetAdresseIP() //Adresse Ip clientt : "192.168.1.98"
sIptest est une chaîne = "192.168.1.118"
BOUCLE
SI PAS(SocketExiste(:sNameSocketClient))ALORS
SI PAS SocketConnecte(:sNameSocketClient,:iport,sIptest) ALORS
Erreur("erreur de connexion au server " + ErreurInfo(errMessage))
:sEtatConnect="Connexion refusé ! "
SINON
:sEtatConnect="Connexion établi"
FIN
SINON
DonneeLecture()
FIN
Trace("Thread C 1 OK ")
ThreadPause(100)
FIN
//Lecture des échange entre le client et serveur
PROCEDURE PUBLIC DonneeLecture()
:sdonne = SocketLit(:sNameSocketClient,Faux,20)
SI :sdonne <> "" ALORS
ListeAjoute(FEN_mere.LISTE_cb,:sdonne)
sEtatEchange="Donnèe reçu"
SINON
sEtatEchange="Donnèe non reçu"
FIN
+méthode déconnecter
...
Test de l'application
L'utilisation de c'est code sont gérer global à la fenêtre et utiliser dans des champ de saisie et bouton...