Avatar billede jps2mt Nybegynder
23. februar 2003 - 12:21 Der er 7 kommentarer og
1 løsning

HTTP problem

Jeg er ved at bygge en 'redirecting proxy', altså så jeg kan have mere end en maskine kørende med web-server på port 80, men kun med 1 offentlig IP...

Mit problem ligger nu i at jeg på en test-side har 4 billeder, vel at mærke forskellige billeder, som den skal hente...

Når den så henter de 4 billeder, er der i 9 ud af 10 gange 2 af billederne der bliver ens, og det er ikke lige sikkert at det er de samme 2 hver gang...

Hvad kan det skyldes??

Et lille udsnit af koden der kommunikerer mellem server og klient:

Private Sub sockClient_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sockClient(Index).GetData tmpIncoming, vbString

strdata$ = tmpIncoming
If Mid$(strdata$, 1, 3) = "GET" Then 'If it is trying to get a site, find out
  findget = InStr(strdata$, "GET ")      ' the site they want then set requestedPage$
  spc2 = InStr(findget + 5, strdata$, " ") ' to it.
  pagetoget$ = Mid$(strdata$, findget + 4, spc2 - (findget + 4))
  requestedpage$ = pagetoget$
ElseIf Mid$(strdata$, 1, 4) = "POST" Then 'This is the code when it is trying to post something!
  findpost = InStr(strdata$, "POST ")        'the data where filtered in the ConnectionRequest
  spc2 = InStr(findpost + 5, strdata$, " ")  'Function of the winsock control
  pagetopost$ = Mid$(strdata$, findpost + 5, spc2 - (findpost + 5))
  requestedpage$ = pagetopost$
End If

Debug.Print requestedpage$
arrIncoming = Split(tmpIncoming, vbCrLf)

For i = LBound(arrIncoming) To UBound(arrIncoming)
  arrHost = Split(arrIncoming(i), ": ")
  If arrHost(0) = "Host" Then
  Hosten = arrHost(1)
  Exit For
  End If
Next i

Redirect = mfncGetFromIni("Redirect", Hosten, App.Path & "\proxy.ini")
If Redirect = "" Then
  Redirect = mfncGetFromIni("Redirect", "default", App.Path & "\proxy.ini")
End If
List.SelColor = vbBlack
List.SelText = Now & ": " & sockClient(Index).RemoteHostIP & " requested " & requestedpage$ & " (" & Redirect & ")" & vbCrLf

sockServer(Index).Close
 
DoEvents

Unload sockServer(Index)

DoEvents

Load sockServer(Index)

DoEvents

sockServer(Index).Protocol = sckTCPProtocol
sockServer(Index).RemotePort = 80
sockServer(Index).RemoteHost = Redirect
sockServer(Index).Connect

For j = 0 To 1000
  DoEvents
Next j

If sockServer(Index).State = 7 Then
  sockServer(Index).SendData tmpIncoming
  Debug.Print Index & ":"
  Debug.Print requestedpage$
ElseIf sockClient(Index).State = 7 Then
  sockClient(Index).SendData error404
'  Debug.Print error404
End If
End Sub

Private Sub sockClient_SendComplete(Index As Integer)
If requestedpage$ <> "" Then 'f the requested page doesn't = nothing then...
requestedpage$ = "" 'clear the requestedPage varible.
sockClient(Index).Close 'Close the connection.
If sockServer(Index).State = 7 Then sockServer(Index).Close
End If

If sockServer(Index).State = 7 Then sockServer(Index).Close
End Sub

Private Sub sockServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sockServer(Index).GetData serverIncoming, vbString

If sockClient(Index).State = 7 Then
  sockClient(Index).SendData serverIncoming
'  Debug.Print serverIncoming
End If
End Sub

Nogen der kan se en fejl der vil betyde at den laver ged i noget af det??

Synes jeg har testet de forskellige variabler, og de ser ud til at indeholde det de skal...

Mvh. Morten
Avatar billede miknil Nybegynder
23. februar 2003 - 17:06 #1
Det er muligvis off topic, men den funktionalitet du ønsker er integreret i IIS'en. IIS'en kan godt servicere flere forskellige web-applikationer med forskellige host-navne på den samme ip-addresse.

miknil
Avatar billede jps2mt Nybegynder
23. februar 2003 - 17:17 #2
Ja...Men hvis du lige læser starten igen...

>Jeg er ved at bygge en 'redirecting proxy', altså så jeg kan have mere end en maskine kørende med web-server på port 80, men kun med 1 offentlig IP...

Dvs. jeg skal med tiden have 2 maskiner kørende begge på port 80...En Linux og en Windows...Derfor dette program...
Avatar billede miknil Nybegynder
23. februar 2003 - 17:38 #3
Si!
Jeg fik vist ikke læst spørgsmålet ordentligt igennem - beklager

miknil
Avatar billede sjh Nybegynder
23. februar 2003 - 21:28 #4
jeg vil tro at det er for du mangler at noget header til browser der forteller at siden er opdatered.

Browser tror at det er det samme den skal hente, derfor tager den brae fra internettemp.
Avatar billede sjh Nybegynder
23. februar 2003 - 21:30 #5
jeg kan vist ikke stave i dag :)

jeg vil tro at det er fordi du mangler at sende noget header til browser der forteller at siden er opdatered.
Avatar billede jps2mt Nybegynder
24. februar 2003 - 19:47 #6
sjh >> Hmmm...Også når det ikke er det samme billede hver gang der er det samme??

Kan se når jeg tester requestedpage$ at den indeholder /1.jpg /2.jpg /3.jpg og /4.jpg men af og til kan der komme 2 af en af dem, og så kommer der til at mangle en, somom at klienten sender data hurtigere end jeg kan når at sende dem vidre til serveren og få svar tilbage... :(
Avatar billede jps2mt Nybegynder
24. februar 2003 - 22:02 #7
Så kom det til at virke...

Det viste sig at VB var for langsom til at behandle de indkomne data, når de kun lå i en eneste streng...Så nu har jeg smidt dem ud i et array der tildeles en værdi i tilsvarende index som socket'en har... :)
Avatar billede sjh Nybegynder
24. februar 2003 - 23:34 #8
nåår ja det var nok en god ide. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester