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?
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ä.
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.