Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: TCP/IP keskustelu monelle

Sivun loppuun

sooda [12.01.2004 18:19:16]

#

tcp/ip keskustelu monelle: serveri lataa aina uuden Winsockin joka clienttiä varten ja näin voi useampi sätata. Sen verran nopeasti tehty että parantamisen varaa on mutta tämähän on vain vinkki joita pitääkin soveltaa... ja en tehnyt tätä nyt vaan kauan sitten esimerkiksi kai zalamanderille ja laitoin tämän koska tuolla https://www.ohjelmointiputka.net/koodivinkit/24142-vb6-tcp-ip-keskustelu pyydettiin... :P
koko säätö löytyy osoitteesta http://sooda.dy.fi/foo/ws.zip. parempi ladata tuolta koska tässä on niin paljon commandbuttoneita ym... no kuitenkin jos haluat vain copypastettaa tuon listauksen niin luo formille(objekti:nimi):
commandbutton: clientiks
commandbutton: s
textbox: osoote
label: servutieto
label: label1
textbox: portti
commandbutton: senddddd
textbox: moikka
winsock:ws

OHOH, tossa oli virhe tossa minkä voi ladata. Korjattiin.

'WinSock monikäyttö esimerkki juttu
'ja hieno sellanen
'ja hieno
'voi käyttää monta tyyppiä samaan aikaan
'by: sooda (konstah@hotmail.com)
Private tyyppi

Private Sub clientiks_Click()

    ws(0).Close 'suletaan
    DoEvents 'annetaan sen sulkeutua
    ws(0).Connect osoote.Text, portti.Text 'ja yhdistellään
    tyyppi = "clientti"

End Sub

Private Sub Form_Load()

    'osote meijjän osotteeks
    osoote.Text = ws(0).LocalHostName

End Sub

Private Sub s_Click()

    ws(0).Close 'sule ettei tuu erooria
    For i = 1 To ws.UBound
        ws(i).Close
        Unload ws(i) 'irrotetaan vanhat wössit, tää on helpointa
        DoEvents
    Next
    ws(0).LocalPort = portti.Text 'portti
    ws(0).Listen 'ja kuunnellaan yhdistyksiä...
    servutieto.Visible = True
    servutieto.Caption = "Odotellaan yhteyksiä..."
    tyyppi = "servu"

End Sub

Private Sub senddddd_Click()

    If tyyppi = "" Then MsgBox "Yhistä eka": Exit Sub
    If tyyppi = "clientti" Then
        ws(0).SendData moikka.Text 'clientillä on vaan 1ksi kple wössejä
    Else
        For i = 0 To ws.UBound
            If ws(i).State = sckConnected Then 'jos yhdistetty niin lähetä
                ws(i).SendData moikka.Text
            End If
        Next
    End If

End Sub

Private Sub ws_Close(Index As Integer)

    DoEvents 'muuten vaan

    'ja kerrotaan että pois
    If tyyppi = "clientti" Then
        MsgBox "Oho, servu sulki yhteyden... :("
    Else
        MsgBox "Soketti #" & Index & " sulkeutui.", vbInformation, "Wössi-Inhvo"
    End If

End Sub

Private Sub ws_Connect(Index As Integer)

    DoEvents 'annetaan sen yhdistää
    'ja ilmotellaan
    MsgBox "Saatiin yhteys kohteeseen " & ws(Index).RemoteHost & ".", vbInformation, "Wössi-Inhvo"

End Sub

Private Sub ws_ConnectionRequest(Index As Integer, ByVal requestID As Long)

    ws(Index).Close 'suljetaan se, kuuntelutilassa ei voida ottaa yhteyksiä
    DoEvents 'ja annetaan sen sulkeutua
    ws(Index).Accept requestID ' otetaan yhteys
    Load ws(ws.Count)  'tehdään uusi wössi (taikuutta!)
    ws(ws.UBound).LocalPort = portti.Text 'setataan sen portti
    ws(ws.UBound).Listen 'ja kuunnellaan sillä
    MsgBox "Oho, mehän ollaan ihan julkkiksia! Sokettiin #" & Index & _
    " yhdistää joku pälli id:llä " & requestID & " .", vbInformation, "Wössi-Inhvo"
    servutieto.Caption = "Soketteja yht. " & ws.Count

End Sub

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

    ws(Index).GetData tieto, vbString
    MsgBox "Soketilta #" & Index & " tuli dataa " & bytesTotal & " tavua: " & vbCrLf & tieto

End Sub

Private Sub ws_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

    'virhe!!!
    MsgBox "Soketilla #" & Index & "kävi virhe #" & Number & ": " _
    & Description, vbInformation, "Soketti erhe!!!"

End Sub

Private Sub ws_SendComplete(Index As Integer)

    MsgBox "Oke, soketti #" & Index & " lähetti datat onnistuneesti.", vbInformation, "Wössi-Inhvo"

End Sub

T.M. [15.01.2004 21:42:27]

#

'ja hieno sellanen
'ja hieno

senddddd_Click()

noi pisti vähän silmään :P

Gaxx [16.01.2004 21:14:02]

#

Emmä muuta tiiä ku, että tuli tarpeeseen :)

Gaxx [16.01.2004 21:21:06]

#

Mut hei... mistä ton winsockin saa(VB5)?

Gaxx [16.01.2004 21:24:56]

#

Ei ku jaa kato löysin sittenki :)

make3003 [17.01.2004 11:24:39]

#

kun latasin ton valmiin niin se valitti jotain tosta "ws" ja jotakin muuta !

sooda [17.01.2004 12:52:38]

#

mitä se valitti? ei mulla...

make3003 [17.01.2004 16:38:06]

#

sooda voitko lähettää sen zip tiedostona mun sähkö postiin ?
Osote: make3003@hotmail.com

jrantala [17.01.2004 19:33:06]

#

kiits :)

jrantala [17.01.2004 19:38:13]

#

jahas, mulla vinkuu ws subist... ;CC

sooda [18.01.2004 15:01:13]

#

mistä subista?

sooda [20.01.2004 17:08:00]

#

OHO! Nyt pitäisi toimia ton ws:n. Kokeilkaa, ite en voi(vb5cce ei tykkää winsockista(license info for this component not found :( ))

sooda [20.01.2004 17:08:34]

#

Oli siis niin että sitä ws:ää ei ollut siinä :D mun vb jotenki sekoili sen kanssa.

mamaze [07.03.2004 12:59:10]

#

kätevä pikku juttu

pipopää [06.05.2004 20:40:57]

#

MUTTA MITES SEN SAA TOIMI­MA­AAN??????????????????????????????!!!!!!!!!!!?!?!?

sooda [07.05.2004 12:11:30]

#

en tiiä mistä johtuu toi muistin loppuminen... joku bufferi siinä täyttyy kun se yhdistelee niin nopeasti, enpäs tiiä.

Bill Keltanen [22.06.2004 08:08:48]

#

Miksei se toinen raukka saa mitään tekstiä ellei servu lähetä sitä?

sooda [22.06.2004 13:04:02]

#

Eipäs kuulukaan, tämä on vain vinkki eikä valmis sätti :)
Noh jos haluat että clientin sendimä teksti näkyy kaikille niin yksinkertaisesti sanot servulle että lähetä se muillekin! :) noh tunge ws_dataarrivaliin viimeiseksi:

If tyyppi = "servu" Then
    For i = 0 To ws.UBound
        If ws(i).State = sckConnected Then 'jos yhdistetty niin lähetä
            ws(i).SendData tieto
        End If
    Next
End If

Isommissa rojekteissa toi senditys kannattaa pistää omaksi subikseen.

AdeRide [19.07.2004 05:43:14]

#

sooda kirjoitti:

en tiiä mistä johtuu toi muistin loppuminen... joku bufferi siinä täyttyy kun se yhdistelee niin nopeasti, enpäs tiiä.

Tietokoneen muisti loppuu sen takia, koska se sulkee ne socketit muttei se ohjelma poista niitä koneen muistista sillä Unload ws(i) -komennolla.

Ite tein sellaisen, mutta sitten kun se yritti avata uutta sockettia siihen samaan niin se sanoi, että se kohde on jo valmiiksi ladattu, joten se ei toiminut se Unload tai sitten tapahtui jotain muuta ARSEtta :D

tesmu [19.07.2004 15:51:48]

#

sen saa toimimaan ku etsii koneeseen sellasen ocx ku WINSOCK.ocx pitäis toimia mut täs on vaan sellanen ongelma et kaikilla on nykyään palomuuri eikä tää ohjelma toimi sen läpi et onko mahollista tehä tohon esim firewall killeri tai joku se ois aika kätevä ottaen esimerkkiä messengeristä ;D

sooda [21.07.2004 11:31:29]

#

lainaus:

sen saa toimimaan ku etsii koneeseen sellasen ocx ku WINSOCK.ocx pitäis toimia mut täs on vaan sellanen ongelma et kaikilla on nykyään palomuuri eikä tää ohjelma toimi sen läpi et onko mahollista tehä tohon esim firewall killeri tai joku se ois aika kätevä ottaen esimerkkiä messengeristä ;D

mswinsck.ocx se yleensä on. Mitään "firewall killeriä" ei voi tehdä, ja mesessä ei ole sellaista. Mistä tollaisen käsityksen oot saanu? :P

greldan [15.08.2004 21:08:49]

#

keskustelijalista ja ja yksityisviestit ois hyvä lisä...

sooda [16.08.2004 12:29:33]

#

lainaus:

keskustelijalista ja ja yksityisviestit ois hyvä lisä...

Päh, tää on vain runko eikä valmis chatti. Tee ite :)

Nitros [28.05.2005 09:14:50]

#

Sooda muuten.
Minulla toi kohta tuosta

Private Sub Form_Load()

    'osote meijjän osotteeks
    osoote.Text = ws(0).LocalHostName

End Sub

Niin tuossa, siis minnunen osoite tohon laitetaan, kun mulla se värjää ton localhostnamen kun koitan käynistää

Mikä on vikana?

nipasenmaki [07.08.2005 15:38:25]

#

Voiko olla mahdollista, että minulta puuttuu koko ws?
project ----> component valikosta sitä löytynyt.

sooda [07.08.2005 23:07:38]

#

nipasenmaki: kyl se sit varmaan puuttuu. mikä vb:n versio btw?

siansaksamies [08.06.2007 12:59:28]

#

Valmispaketin auki revin. Valmiin client-esimerkin olin jostain muualta hakenut ja sillä yhdistin. Kun clientin suljin, rupes tämä koodi servuna looppaamaan erroria clientin poistumisesta, eikä loppunu ennen kun koko VB:n sulin.

Fiksailin yksinkertaisesti muuntamalla else:n elseif:ksi ja ehdoiks tyyppi="servu" and toisto=0, lisäsin ehdon alle vielä tehtävän "toisto=toisto+1" ja luonnollisesti määritin toiston integeriks.

Kääntyy muuten aika hyvin VB.NET:lle sen omilla työkaluilla, tosin koodi ei ole enää parhaimmillaan sen jälkeen.

Mugi [25.09.2007 17:32:40]

#

pitikin ihan luoda acountti tätä varten :P

tosiaan, kolmatta päivää nyt kirjoittelen tavaraa visual basicilla, ja tottakai oma chat clientti ekana hommana ettei mene liian helpoksi koko touhu =)

ainoana vastaantulevana ongelmana oli tosin juuri tuo että kun teksti ei tule kun serveriin asti, enkä keksinyt että millä sen sa kulkemaan muillekkin asti


tein muuten tuohon nimimerkkisysteemin joka toimii ainakin kahden ihmisen keskusteluissa moitteetta :)

eli yksinkertaisimmillaan lisää vaan formiin 1 kappale textboxeja jonka nimi on "nick"
ja sitten muuta seuraavat kohdat koodista

Private Sub senddddd_Click()

    If tyyppi = "" Then MsgBox "Connect first": Exit Sub
    If tyyppi = "clientti" Then
        WS(0).SendData "(" & nick.Text & ") " & moikka.Text 'clientillä on vaan 1ksi kple wössejä
        Let msg.Text = msg.Text & vbCrLf & "(" & nick.Text & ") " & moikka.Text
    Else
        For i = 0 To WS.UBound
            If WS(i).State = sckConnected Then 'jos yhdistetty niin lähetä
                WS(i).SendData "(" & nick.Text & ") " & moikka.Text
                Let msg.Text = msg.Text & vbCrLf & "(" & nick.Text & ") " & moikka.Text
            End If
        Next
    End If
End Sub

tässä tosiaan sitten olen muuttanut tuon "msg" textboxin multi-line tyyppiseksi jotta logit säilyisivät

jos nyt joku ihmetteli tuota

Let msg.Text = msg.Text & vbCrLf & "(" & nick.Text & ") " & moikka.Text

Syntty [14.10.2008 00:40:47]

#

Tämä on mielestäni tosi hyvin tehty ja käytän tämän oppeja tulevaisuudessa!


Sivun alkuun

Vastaus

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

Tietoa sivustosta