Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Winsock dataArrival

juhaz [25.12.2008 21:05:08]

#

Siis miten ihmeessä tämän pitäisi oikein toimia? Yritän siis Visual Basic kutosella winsockin dataArrivaliin tulevia komentoja lukea ja suorittaa toimintoja sen mukaan, mutta ei se tunnista niitä.

Private Sub sock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim dataa As String

sock1(Index).GetData dataa

Select Case LCase(dataa)
 Case Is = "exit"
  sock1(Index).Close
  MsgBox "lopetti #" & Index
 Case Else
  sock1(Index).SendData "Väärä komento" & vbCrLf
End Select

End Sub

Eli jos käyttäjä antaisi komennon "exit" niin hänen winsock-yhteytensä pitäisi kai kaiken järjen mukaan sulkeutua ja ohjelman pitäisi tekstilaatikolla ilmoittaa serverillä asiasta, mutta siellä tuleekin vaan "Väärä komento" kokoajan clientin terminaaliin.

Otan yhteyden serveriin siis telnet-ohjelmistolla (putty). Jotain ylimääräistä tauhkaa taitaa putty lähettää sen komennon mukana, koska ei toimi, mutta miten saisin sen sitten toimimaan?

vehkis91 [25.12.2008 21:10:28]

#

Oletko kokeillut if..elsellä?

Private Sub sock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim dataa As String

sock1(Index).GetData dataa

if dataa = "exit" then
  sock1(Index).Close
  MsgBox "lopetti #" & Index
else:
  sock1(Index).SendData "Väärä komento" & vbCrLf
End if

End Sub

EDIt: virheitä

EDIT2: tulosta tuon sock1(Index).GetData dataa jälkeen, että onko sinne ilmestynyt mitään dataa, jos ei ole niin vika saattaa olla tuossa rivissä.

juhaz [25.12.2008 21:28:45]

#

joo siis jos laittaa msgbox dataa niin se kyllä tulostaa sen mitä käyttäjä on kirjoittanut ja if-lausekkeilla se ei toimi yhtään sen paremmin kuin select casellakaan.

Hyvin harvoin se hyväksyy sen komennon näköjään. Varmaan kerran tuhannella koittamalla kirjoittamalla puttyssä komento "exit" se toimii, kuten pitää, mutta kaikilla 999 muulla yrityskerralla tulee vain tuo minun virheviesti.

Grez [25.12.2008 23:17:37]

#

En nyt jaksa käynnistää VB6:ta joten alla olevassa voi olla virheitä. Idea kuitenkin selvinnee. Tämä myös vaatii nyt rivinvaihdon painamista komennon jälkeen.

'Näitä tarvii olla saman verran kuin vastaanottavia Sock1:ä, esimerkissä 50 on suurin
Private Puskuri(50) as String
Private Sub sock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim dataa As String
Dim palat() As String , i As Long

sock1(Index).GetData dataa

Puskuri(Index) = Puskuri(Index) & dataa

if Instr(1, Puskuri(Index), vbCr) = 0 then Exit Sub 'Ei rivinvaihtoa

palat = Split(Puskuri(Index), vbCr)

For i = 0 to Ubound(palat)-1

 Select Case LCase(palat(i))
  Case Is = "exit"
   sock1(Index).Close
   MsgBox "lopetti #" & Index
  Case Else
   sock1(Index).SendData "Väärä komento" & vbCrLf
 End Select

Next

Puskuri(Index) = palat(i)

End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta