j'ai un petit problème avec le réseau. Je souhaiterai faire une sorte de proxy pour une application qui ne fait que du HTTP sur un site. Je pensais donc qu'il me suffirai de recopier ce qui m'était envoyé par le client sur le serveur et inversement. Mais ça ne se passe pas comme pévu, ça marche avec google par exemple, mais dès qu'il y a de gros fichiers, ça ne fonctionne plus. Est-ce que je m'y prends mal avec ce code ?
Sinon la fonction SendNetworkData() me retourne de temps en temps -1, je suppose que c'est qu'elle n'a pas pu envoyer les data, peut-on savoir pourquoi ?
Le retour de cette fonction n'est plus documenté, c'est toujours la taille envoyée si correct, -1 sinon ?
Code : Tout sélectionner
If InitNetwork() = 0
MessageRequester("Erreur", "Initialisation du réseau impossible.", #MB_ICONERROR)
End
EndIf
;- Declarations
; Constantes
Enumeration
EndEnumeration
; Structures
Structure S_Serveur
Event.l
ClientID.l
NB_Connectes.l
Adresse.s
EndStructure
Structure S_Client
Event.l
ClientID.l
EndStructure
; Listes
; Buffer
; Variables
Sortie.b
Port.l = 80
*Buffer.l = AllocateMemory(60000)
ClientID.l
Taille.l
Serveur.S_Serveur
Serveur\Adresse = "www.google.fr"
Client.S_Client
Eol.s = Chr(13) + Chr(10)
; Création du serveur
If CreateNetworkServer(0, Port) = 0
MessageRequester("Erreur", "Impossible de créer le serveur," + Eol + "le port '" + Str(Port) + "' est-il libre ?", #MB_ICONERROR)
End
EndIf
;- Création de la fenêtre
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
StringGadget(0,0,0,800,500,"",#ES_MULTILINE|#WS_VSCROLL)
CreateStatusBar(0, WindowID(0))
AddStatusBarField(800)
StatusBarText(0, 0, "Connectés : " + Str(NB_Connectes), #PB_StatusBar_Center)
If OpenFile(0,"debug.txt")
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Sortie = 1
EndSelect
Serveur\Event = NetworkServerEvent()
If Serveur\Event
Serveur\ClientID = EventClient()
Select Serveur\Event
Case #PB_NetworkEvent_Connect
Serveur\NB_Connectes + 1
StatusBarText(0, 0, "Nabaztag connectés : " + Str(Serveur\NB_Connectes), #PB_StatusBar_Center)
Client\ClientID = OpenNetworkConnection(Serveur\Adresse, 80)
Case #PB_NetworkEvent_Data ;- Reception de données
Taille = ReceiveNetworkData(Serveur\ClientID, *Buffer, 60000)
SendNetworkData(Client\ClientID, *Buffer, Taille)
Debug ""
Debug "Envoi"
Debug PeekS(*Buffer)
Debug "______________"
Debug ""
WriteString(0,"Envoi" + Eol)
WriteData(0,*Buffer,Taille)
WriteString(0,Eol + "______________" + Eol + Eol + Eol)
Case #PB_NetworkEvent_Disconnect
Serveur\NB_Connectes - 1
StatusBarText(0, 0, "Nabaztag connectés : " + Str(Serveur\NB_Connectes), #PB_StatusBar_Center)
CloseNetworkConnection(Client\ClientID)
EndSelect
EndIf
If Client\ClientID
Client\Event = NetworkClientEvent(Client\ClientID)
If Client\Event = #PB_NetworkEvent_Data
Taille = ReceiveNetworkData(Client\ClientID, *Buffer, 60000)
tmp = SendNetworkData(Serveur\ClientID, *Buffer, Taille)
Debug "Retour: " + Str(tmp) + "taille : " + Str(taille)
Debug PeekS(*buffer)
Debug "__________"
WriteString(0,"Retour: " + Str(tmp) + " taille : " + Str(taille) + Eol)
WriteData(0,*Buffer,Taille)
WriteString(0,Eol + "______________" + Eol + Eol + Eol)
EndIf
EndIf
Delay(50)
Until Sortie = 1
EndIf
FreeMemory(*Buffer)