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
'ja hieno sellanen
'ja hieno
senddddd_Click()
noi pisti vähän silmään :P
Emmä muuta tiiä ku, että tuli tarpeeseen :)
Mut hei... mistä ton winsockin saa(VB5)?
Ei ku jaa kato löysin sittenki :)
kun latasin ton valmiin niin se valitti jotain tosta "ws" ja jotakin muuta !
mitä se valitti? ei mulla...
sooda voitko lähettää sen zip tiedostona mun sähkö postiin ?
Osote: make3003@hotmail.com
kiits :)
jahas, mulla vinkuu ws subist... ;CC
mistä subista?
OHO! Nyt pitäisi toimia ton ws:n. Kokeilkaa, ite en voi(vb5cce ei tykkää winsockista(license info for this component not found :( ))
Oli siis niin että sitä ws:ää ei ollut siinä :D mun vb jotenki sekoili sen kanssa.
kätevä pikku juttu
MUTTA MITES SEN SAA TOIMIMAAAN??????????????????????????????!!!!!!!!!!!?!?!
en tiiä mistä johtuu toi muistin loppuminen... joku bufferi siinä täyttyy kun se yhdistelee niin nopeasti, enpäs tiiä.
Miksei se toinen raukka saa mitään tekstiä ellei servu lähetä sitä?
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.
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
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
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
keskustelijalista ja ja yksityisviestit ois hyvä lisä...
lainaus:
keskustelijalista ja ja yksityisviestit ois hyvä lisä...
Päh, tää on vain runko eikä valmis chatti. Tee ite :)
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?
Voiko olla mahdollista, että minulta puuttuu koko ws?
project ----> component valikosta sitä löytynyt.
nipasenmaki: kyl se sit varmaan puuttuu. mikä vb:n versio btw?
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.
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
Tämä on mielestäni tosi hyvin tehty ja käytän tämän oppeja tulevaisuudessa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.