Page 1 sur 1
[R] Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 17:08
par tomy46
Bonjour à tous
Tout est dans la question :p
J'attends votre aide ...
Merci
P.S : Il me faudrait le code coté client et serveur

Re: Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 17:25
par tomy46
UP :s
Re: [...] Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 17:42
par tomy46
Toujours rien

Re: [...] Comment envoyer un fichier .ini via un s
Posté : mer. 25 nov. 2009 18:23
par jbnh
Re: [...] Comment envoyer un fichier .ini via un s
Posté : mer. 25 nov. 2009 18:49
par tomy46
Oui je sais bien mais c'est un soft que je doit faire avancer le plsu repidement possible ...
Après, j'ai deja éplucher tout le forum et j'ai aps trouver la réponse à ma question : et tes deux liens ne m'aide pas non plus
Moi c'est des fichiers que j'en ai besoin pas pour de simple messages (je sais deja le faire ça

)
Re: [...] Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 21:18
par sylvanie
Et bien c'est à peu de chose près pareil, puisque TCPSend peut envoyer du binaire comme de la string.
donc un fileread en mode 0 suffirait puisqu'un .ini n'est pas du binaire pur. Sinon il faudrait le lire en mode 16 (binary)
Par contre ce qui n'est pas précisé, c'est côté serveur, puisque vous n'indiquez pas si vous le dévelloppez vous même ou si il s'agit d'un service déjà existant genre serveur FTP ou SCP, ...
Re: [..] Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 21:42
par tomy46
Oui oui oui ...
On est d'accord jusque là ....
Mais en plus concret vous voyez quoi ? :s
Re: [..] Comment envoyer un fichier .ini via un socket ?
Posté : mer. 25 nov. 2009 23:54
par sylvanie
Et bien repartons des exple de TCPsend et TCPrecv en les modifiant de la manière suivante :
le serveur va attendre une première info qui sera la taille du fichier envoyée. Celle ci sera converti en Hexa avec 8 caractère de formatage, comme ça on pourra faire n tcprecv sur 8 octets pour toutes les tailles.
Puis on lance un tcprecv sur la taille obtenu précédément.
côté client :
on lit le fichier à envoyé, on converti sa taille en hexa sur 8 bytes. on envoie cette info, puis on envoie le fichier buffurisé grâce à fileread.
serveur :
► Afficher le texte
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.0.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Opt('TCPTimeout',2000)
;==============================================
;==============================================
;SERVER!! Start Me First !!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
; Set Some reusable info
; Set your Public IP address (@IPAddress1) here.
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv,$recv_size
Local $dbg_log = FileOpen("dbg.txt",2)
; Start The TCP Services
;==============================================
TCPStartup()
; Create a Listening "SOCKET".
; Using your IP Address and Port 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
; If the Socket creation fails, exit.
If $MainSocket = -1 Then Exit
; Create a GUI for messages
;==============================================
$GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
; Initialize a variable to represent a connection
;==============================================
$ConnectedSocket = -1
;Wait for and Accept a connection
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
; Get IP of client connecting
$szIP_Accepted = SocketToIP($ConnectedSocket)
; GUI Message Loop
;==============================================
While 1
$msg = GUIGetMsg()
; GUI Closed
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; Try to receive the size of file
;----------------------------------------------------------------
$recv_size = TCPRecv($ConnectedSocket, 8)
; If the receive failed with @error then the socket has disconnected
;----------------------------------------------------------------
If @error Then ExitLoop
FileWrite($dbg_log,$recv_size&@CRLF)
$recv_size=Dec($recv_size)
FileWrite($dbg_log,$recv_size&@CRLF)
If $recv_size > 1024*1024*1024 Then ExitLoop; on peut admettre qu'1Go s'est beaucoups ...
; Try to receive the size of file
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, $recv_size)
; If the receive failed with @error then the socket has disconnected
;----------------------------------------------------------------
If @error Then ExitLoop
FileWrite($dbg_log,$recv&@CRLF)
; Update the edit control with what we have received
;----------------------------------------------------------------
If $recv <> "" Then
GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
FileWrite("exple_recopie_serveur.txt",$recv)
EndIf
ExitLoop
WEnd
FileClose($dbg_log)
If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc ;==>Example
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
client :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;CLIENT! Start Me after starting the SERVER!!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
; Set Some reusable info
;--------------------------
Local $ConnectedSocket, $szData
; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891
Local $file_to_send = "param.ini",$szData_size
; Start The TCP Services
;==============================================
TCPStartup()
; Initialize a variable to represent a connection
;==============================================
$ConnectedSocket = -1
;Attempt to connect to SERVER at its IP and PORT 33891
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
; If there is an error... show it
If @error Then
MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
; If there is no error loop an inputbox for data
; to send to the SERVER.
Else
;Loop forever asking for data to send to the SERVER
While 1
; InputBox for data to transmit
;$szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")
$szData_size=FileGetSize($file_to_send)
$szData = FileRead($file_to_send)
; If they cancel the InputBox or leave it blank we exit our forever loop
If @error Or $szData = "" Then ExitLoop
ConsoleWrite(Hex($szData_size,8)&@CRLF)
ConsoleWrite($szData)
; We should have data in $szData... lets attempt to send it through our connected socket.
ConsoleWrite(TCPSend($ConnectedSocket, Hex($szData_size,8))&@CRLF)
Sleep(500)
ConsoleWrite(TCPSend($ConnectedSocket, $szData)&@CRLF)
; If the send failed with @error then the socket has disconnected
;----------------------------------------------------------------
If @error Then ExitLoop
ExitLoop
WEnd
EndIf
EndFunc ;==>Example
Tour l'aspect GUI viens de l'exple d'origine ... j'ai fait au plus rapide ...
le "serveur recopie dans cette exple tout fichier reçu dans "exple_recopie_serveur.txt" et laisse un log de debug
Re: [..] Comment envoyer un fichier .ini via un socket ?
Posté : jeu. 26 nov. 2009 23:39
par tomy46
Nickel

Rien à dire c'est parfait

Un grand merci en tout cas
@Très bientôt