Configurer la connexion entre deux PC (Localhost)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Configurer la connexion entre deux PC (Localhost)

#1

Message par Numeric »

Salut,
J'ai besoin d'aide.
j'ai crée deux programmes : un serveur et un client dans le but de jouer, tchater et étudier la nuit avec mon ami(Chambres differentes en Cité universitaire : distantes de 7 mètres)

1) mon problème est que mon serveur repond parfaitement à mon client sur ma machine :
2) Mais quand mon ami qui à le même programme : serveur-client ainsi que moi, se connectons sur mon réseau local...mes Messages c'est mon serveur qui les affiches. Les messages de mon ami c'est son serveur qui les affiches. :?:
2) j'ai pas fait de la programmation réseau :oops: et j'en connais pas grand chose pour le moment car nous sommes en examen et j'ai pas le temps.....
je sais que le simple fait d'avoir un serveur-client tous les deux et d'être sur le même reseau ne permet pas de communiquer...Alors je sais pas quoi faire pour pouvoir communiquer entre deux PC grace à mon programme.

Remarque...y'a t'il une façon speciale de coder ces programmes? ATTENTION j'ai même essayé des exemples de matwachich et bien d'autres prog postés comme exemples sur ce site.... mais pas de communications entre deux PC...
3) quoi faire comme configuration ou programme??
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#2

Message par walkson »

Bonjour,
Je ne suis pas un spécialiste des réseaux mais en vous lisant, il y a plusieurs choses qui me troublent
- Etes vous sûr d'être en localhost car si c'est le cas chacun peut voir qui est connecté au réseau (ça craint !)
- Si votre configuration est bonne, il est impossible de lire un message que vous envoyez sur un même poste
le serveur attends la connexion du client (IP interne ou externe du client) sur un même port (ex: 80)
L'autre serveur fait la même chose (IP du client) mais sur un port différent (ex: 8080)
Pour résumer, votre serveur a l'IP de votre ami sur un même port et attend les messages du client (votre ami)
- Fermer le pare-feu pour faire vos tests, ça évite les mauvaises surprises
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#3

Message par Numeric »

j'ai pas trop compris la partie sur les ports expliquée par Walkson ..
pour une meilleur compréhension je vous montre cet exemple simple : client-serveur...

voici le code du serveur

Code : Tout sélectionner

;SERVEUR
TCPStartup()
Global Const $cPort = 8080
Global $IPAdress = @IPAddress1
Global $iMax = 2, $mainSocket, $Recv


$mainSocket = TCPListen($IPAdress, $cPort, $iMax)
If $mainSocket = -1 Or $mainSocket = 0 Then
	MsgBox(16, '', 'Impossible de créer un Socket d''écoute ' & @error, 2)
	TCPShutdown()
	Exit
EndIf

Do
	$s__Socket = TCPAccept($mainSocket)
	Sleep(50)
Until $s__Socket = -1


While $Recv <> 'exit'
	$Recv = TCPRecv($s__Socket, 9999)
	If $Recv <> '' Then
		MsgBox(64, 'Message reçue', 'Msg: ' & $Recv)
	EndIf
WEnd

et aussi celui du client :

Code : Tout sélectionner

;CLIENT
TCPStartup( )
Global $__Socket, $IPAdress = @IPAddress1
Global Const $iPort = 8080 ;Problème : j'ai pas compris l'explication de walkson ici, client et serveur ont même port et probalement même IP celle de la machine..

$__Socket = TCPConnect($IPAdress, $iPort) ;

If $__Socket = -1 Or $__Socket = 0 Then
	MsgBox(16,'ERREUR','Impossible de se connecter ' & @error,2)
	TCPShutdown()
	Exit
EndIf

Do
	$To__Send = InputBox('Tchat','Envoyez votre Message')
	TCPSend($__Socket,$To__Send)
	Sleep(50)

Until $To__Send = 'exit'

TCPCloseSocket($__Socket)
TCPShutdown( )
Exit
Ma question est :
Est ce que si l'on connecte grâce à un réseau had hoc deux ordinateurs comportant tous deux ces deux programmes ci dessus (clients-serveurs) , on pourrait sans aucune autre modification supplémentaire communiquer?
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#4

Message par walkson »

Bonjour,
l'erreur est ici Global $IPAdress = @IPAddress1 pour le serveur. Il faut l'adresse du client (son IP interne ou externe)
Comme vous utilisez deux programmes identiques pour communiquer, il faut que les ports soient différents
programme 1 (serveur-client1) port: 80 avec IP du serveur1
programme 2 (serveur-client2) port: 8080 avec IP du serveur2
[Edit] j'ai corrigé mon erreur
Avec le code que j'ai mis ci-dessous, un programme est suffisant puisque l'on peut envoyer et lire d'un ordi à l'autre et vice versa
Modifié en dernier par walkson le lun. 04 juil. 2016 15:25, modifié 1 fois.
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#5

Message par orax »

Sur le serveur, ce n'est pas Until $s__Socket = -1, c'est :

Code : Tout sélectionner

Until $s__Socket <> -1
Je ne suis pas sûr de bien comprendre ton message, walkson.
Il y a une autre erreur, mais elle est au niveau du client. Le client doit mettre l'IP du serveur.

Code : Tout sélectionner

Global $__Socket, $IPAdress = ADRESSE_IP_DU_SERVEUR
Éventuellement, si ça ne marche toujours pas, il faudrait s'assurer que le serveur écoute bien sur la bonne interface réseau. Dans le code $IPAdress = @IPAddress1, on ne sait pas à quelle IP correspond @IPAddress1.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#6

Message par walkson »

Merci Orax d'avoir rectifié (IP du serveur à utiliser :oops: )
Je viens de tester ce code entre 2 ordinateurs et ça marche
Pour le serveur

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("SERVEUR", 240, 140, 192, 124)
Global $Input1 = GUICtrlCreateLabel("", 24, 8, 185, 25)
Global $Input2 = GUICtrlCreateInput("", 22, 42, 185, 25)
Global $Button1 = GUICtrlCreateButton("Envoi", 80, 88, 65, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
TCPStartup() ; Start the TCP service.
OnAutoItExitRegister("OnAutoItExit")
    ;$ip = TCPNameToIP("servehttp.hopto.org")
	Local $IPAddress = @IPAddress1;"127.0.0.1" ; This IP Address only works for testing on your own computer.
    Local $port = 80 ; Port used for the connection.
   $listener = TCPListen($IPAddress,$port,10) ; création du socket d'écoute
    If $listener = -1 Then ; si il y a une erreur, on l'affiche et on ferme service TCP et programme
        MsgBox(16,"Erreur","Erreur lors de la création du socket d'écoute : n°" & @error)
        TCPCloseSocket($listener)
        TCPShutdown()
    EndIf
		Do ; Wait for someone to connect (Unlimited).
		; Accept incomming connexions if present (Socket to close when finished; one socket per client).
		$iSocket = TCPAccept($listener)

		; If an error occurred display the error code and return False.
		If @error Then
			$iError = @error
			MsgBox(0, "", "Server:" & @CRLF & "Could not accept the incoming connection, Error code: " & $iError)
			Exit
		EndIf
		Until $iSocket <> -1 ;if different from -1 a client is connected.
		TCPCloseSocket($listener)

$temp = TCPRecv($iSocket,9999)
If $temp <> "Art14poM" Then
	Exit
Else
TCPSend($iSocket,"44oilZAe")
EndIf
AdlibRegister("_TCP_Server",250)
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   TCPShutdown()
   Exit
  Case $Button1
	  	  $envoi = GUICtrlRead($Input2)
	  TCPSend($iSocket,$envoi)
	  If @error Then ToolTip("erreur " & @error,100,100)
 EndSwitch
WEnd
Func _TCP_Server()
ToolTip($iSocket,100,100)
					$temp = TCPRecv($iSocket,9999) ; on attend la réception de données
					If $temp = "FERMER" Then Exit
					If $temp <> "" Then
					GUICtrlSetData($Input1,$temp)
					EndIf


EndFunc   ;==>_TCPSend_Server

Func OnAutoItExit()
	TCPShutdown() ; Close the TCP service.
EndFunc   ;==>OnAutoItExit
Pour le client

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("CLIENT", 240, 140, 600, 124)
Global $Input1 = GUICtrlCreateLabel("", 24, 8, 185, 25)
Global $Input2 = GUICtrlCreateInput("", 22, 42, 185, 25)
Global $Button1 = GUICtrlCreateButton("Envoi", 80, 88, 65, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
    TCPStartup() ; le programme utilise désormais le protocole TCP/IP
	;$ip = TCPNameToIP("servehttp.hopto.org")
	Local $IPAddress = "192.168.1.10" ;"127.0.0.1" ; This IP Address only works for testing on your own computer.
    Local $port = 80
    $socket = TCPConnect($IPAddress,$port)
	;$socket = TCPConnect($ip,$port) ; on tente une connexion à l'IP xxx.xxx.x.xxx
    If $socket = -1 Or $socket = 0 Then ; si on ne peut pas se connecter
        MsgBox(16,"", "Impossible de se connecter au serveur!")
        TCPShutdown() ; le programme n'utilise plus le protocole TCP/IP
        Exit ; on quitte le programme
    EndIf

OnAutoItExitRegister("OnAutoItExit")
	TCPSend($socket,"Art14poM")
	Sleep(500)
	$recoie = TCPRecv($socket,9999)
	If $recoie <> "44oilZAe" Then
	TCPSend($socket,"FERMER")
	Sleep(500)
	Exit
	EndIf

AdlibRegister("TCP_client",250)
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   TCPShutdown()
   Exit

  Case $Button1
	  $envoi = GUICtrlRead($Input2)
	  TCPSend($socket,$envoi)
 EndSwitch
WEnd
Func TCP_client()
	$recoie = TCPRecv($socket,9999)
	If $recoie <> "" Then
		GUICtrlSetData($Input1,$recoie)
	EndIf

EndFunc


Func OnAutoItExit()
	TCPShutdown() ; Close the TCP service.
EndFunc   ;==>OnAutoItExit
Il faudra modifier l'IP 192.168.1.10
Vous pouvez communiquer avec ce système (envoie et réception)
Il faut lancer le serveur en premier
Et je précise que le code n'est pas de moi (matwachich ?)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 132
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#7

Message par Numeric »

Salut,
Désolé du retard, (examen)
pour ce qui est d'une configuration simple client serveur avec deux ordinateurs, je crois que je n'ai plus de soucis,
j'ai modifié le code posté par Walkson et nous l'utilisons déjà pour traiter nos exercices, les nuits.
Mais très vite un problème se pose : impossible de s'envoyer l'un l'autre des fichiers ....
y a t'il une solution pour ce problème avec ce même code?
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Configurer la connexion entre deux PC (Localhost)

#8

Message par walkson »

Bonjour,
Il y a un post sur le forum qui parle de cela
Si ma mémoire est bonne, Fileread() était utilisé
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre