Home > Visual Basic, Winsock > Belajar Winsock bagian 3 – Multiple Connection

Belajar Winsock bagian 3 – Multiple Connection

January 30, 2010

Di postingan saya sebelumnya kita sudah mengetahui bagai mana cara membuat aplikasi chat sederhana yang hanya melibatkan saya dan Anda😀, dan bagai mana jika ada teman saya yang lain ikut nimbrung ?

Jelas ini tidak bisa karena 1 winsock hanya bisa menangani 1 port, trus bagaimana jika kita ingin teman kita yang lain bisa konek di port yang sama dan hanya menggunakan 1 winsock? Jawabannya sederhana objek winsocknya kita jadikan array.

Oke, masukkan objek winsock ke form kemudian untuk menjadikannya sebagai objek array kita cukup mengset properties Index=0, jadi winsock dengan index 0 bertugas untuk mengecek permintaan koneksi masuk dan mengalokasikannya kepada yang berhak🙂 dan tentu saja untuk melakukan hal ini harus dalam mode mendengarkan/Listen

Private Sub Form_Load()
    With Winsock1(0)
        .Close
        .LocalPort = 11111 'nilai port ini bisa diganti
        .Listen
    End With
End Sub

Ketika ada permintaan koneksi di port 11111, kita harus menambahkan objek winsock baru untuk menerima permintaan koneksi tersebut dan karena objek winsock yang baru tidak kita set properties LocalPortnya otomatis windows yang akan memberikan nilai Port secara acak.

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    'we should only be getting connection requests from
    'Index 0 because thats the only one that is listening

    'load a new winsock
    Load Winsock1(Winsock1.UBound + 1)

    'accept the incoming connection on our new control
    Winsock1(Winsock1.UBound).Accept requestID
End Sub

Fungsi UBound digunakan untuk mendapatkan nilai index terakhir dari objek array, jadi untuk mengetahui berapa jumlah objek arraynya kita cukup memanggil fungsi UBound + 1.

Solusi menggunakan winsock array diatas masih mempunyai sedikit masalah, misalkan kita sudah mempunyai 5 koneksi di port 11111 ini artinya kita sudah mempunyai 6 objek winsock yang aktif, index 0 dalam mode mendengarkan/Listen, dan 1 sampai 5 konek ke klien.

Apa yang terjadi jika 3 klien tidak terkoneksi lagi? Sebenarnya sih enggak terlalu bermasalah, masalahnya adalah jika ada klien lain yang konek ke server otomatis objek winsock baru ditambahkan lagi untuk menerima koneksi yang baru, padahal ada 3 objek winsock yang sedang nganggur/idle.

Bayangkan jika kita diminta untuk membuat aplikasi billing warnet dengan 100 klien, ada 50 klien yang sudah disconnect kemudian ada 50 klien lagi yang baru konek. Ini artinya kita mempunyai 50 objek winsock nganggur/idle yang jelas-jelas merupakan pemborosan memory dan bagai mana jika hal tersebut terulang lagi, lagi dan lagi.

Bagaimana solusinya? Yaph sebenarnya ini juga gampang, jadi jika ada permintaan koneksi dari klien kita cek dulu ada nggak objek winsock yang idle, kalo ada arahkan agar winsock yang idle tadi untuk menerima koneksi tersebut, jika tidak ada baru kita tambahkan objek winsock yang baru untuk menerima koneksi tersebut sehingga kode sebelumnya harus kita revisi menjadi :

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    Dim i          As Long
    Dim j          As Long

    On Error GoTo errHandle

    If Index = 0 Then 'ingat yang bertugas untuk mengecek permintaan koneksi adalah objek winsock dengan index = 0
        'ini bagian yang bertugas untuk mengecek winsock yang idle
        For i = 1 To Winsock1.UBound
            If Winsock1(i).State = sckClosed Or Winsock1(i).State = sckClosing Then
                j = i   'var j menampung index winsock yang idle
                Exit For
            End If
        Next i

        'jika j = 0 berarti semua winsock kepakai, otomatis kita harus menambahkan winsock yang baru
        If j = 0 Then
            Call Load(Winsock1(Winsock1.UBound + 1))
            j = Winsock1.UBound
        End If

        'terima koneksi yang baru
        With Winsock1(j)
            Call .Close
            Call .Accept(requestID)
        End With

    End If

    Exit Sub

errHandle:
    Call Winsock1(0).Close
End Sub

Yaph cukup itu saja, contoh programnya bisa didownload disini.

Artikel berikutnya insya Alloh dengan judul Belajar Winsock bagian 4 – Membuat jaringan VPN sendiri.

Di artikel tersebut saya sudah tidak membahas penggunaan winsock lagi tetapi artikel tersebut dibutuhkan agar saya bisa menulis artikel terakhir dari 5 seri belajar Winsock ini yang berjudul Belajar Winsock bagian akhir – Contoh kasus mengakses data stok barang dari luar.

Dan tentunya ini bukan via web (kalo yang ini sudah enggak perlu dibahas lagi) tetapi tetap dengan mengembangkan contoh-contoh program winsock sebelumnya, dan sebagai uji coba untuk komputer server toko yang akan diakses menggunakan speedy sedangkan saya menggunakan starone dan mudah-mudahan saja uji coba ini berhasil🙂.

Selamat mencoba🙂

  1. February 1, 2010 at 2:19 am

    Artikel-artikelnya bener2 kereeen…!!

  2. February 1, 2010 at 3:01 am

    akhirudin :

    Artikel-artikelnya bener2 kereeen…!!

    Wah tq banget nih atas responnya🙂

  3. horas
    June 23, 2010 at 7:15 pm

    Om pernah kejadian seperti ini gax di winsock?

    misal program server & client sudah terkoneksi, kemudian jika kompie (misal: server) ngehang/kerestart, maka value fungsi “state” winsock di program clientnya ga berubah (alias masih “sckConnected”, harusnyakan jadi “sckClosed”). Tapi jika program servernya diexit secara normal, value fungsi “state”nya jadi “sckClosed”.

    itu kenapa ya? apakah komponen winsock 2.0 bawaan vb.6 memang mempunyai kelemahan seperti itu?

    • June 24, 2010 at 1:02 am

      Mungkin si Om bisa mencoba event Error untuk menghandle masalah ini :

      Private Sub Winsock1_Error(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)
          MsgBox "Server sedang bermasalah !!!", vbExclamation, "Peringatan"
          Winsock1.Close
      End Sub
      

      Selamat mencoba🙂

      • horas
        June 24, 2010 at 10:35 am

        Sebelumnya saya juga sudah pernah menggunakan event error ini om, tapi “kadang” masih suka terjadi seperti itu. (jadi intinya hanya kadang2)

        Terus masalah lain yang pernah saya temui yaitu: “misal program server & client sudah terkoneksi, lalu pc server saya restart, nah pada kasus ini misal program client bisa mengetahui kalo dirinya sudah tidak terkoneksi dengan server (status jadi “sckClosed”), namun yang jadi permasalahan, dalam rentang waktu pc server itu ngerestart kan proram client saya buat looping untuk melakukan koneksi ulang ke server. Nah begitu program server sudah aktif, program client malah tidak bisa terkoneksi ke server, alhasil program client harus saya exit dulu, baru bisa terkoneksi. itu kenapa ya?

        • horas
          June 24, 2010 at 10:37 am

          ralat bagian akhir ->

          alhasil program client harus saya exit dulu lalu dijalankan lagi, baru bisa terkoneksi. itu kenapa ya?

  4. June 24, 2010 at 11:15 am

    horas :

    Sebelumnya saya juga sudah pernah menggunakan event error ini om, tapi “kadang” masih suka terjadi seperti itu. (jadi intinya hanya kadang2)

    Mungkin juga seperti yg om perkirakan sebelumnya memang ada bug di winsocknya.

    Sama seperti kasus yg sy temui, aplikasi seperti hang pada saat ditutup klo komputer terkoneksi ke internet pada hal kalo tidak terkoneksi ke internet lancar2x saja.

    ralat bagian akhir ->

    alhasil program client harus saya exit dulu lalu dijalankan lagi, baru bisa terkoneksi. itu kenapa ya?

    Looping koneksinya seperti ini ya ?

    Private Function startConnect(ByVal ipServer As String) As Boolean
        On Error Resume Next
        
        If Socket.State <> sckClosed Then Socket.Close ' close existing connection
        Call Socket.Connect(ipServer, LOCAL_PORT)
        With Socket
            Do While .State <> sckConnected
                DoEvents
                If .State = sckError Then Exit Function
            Loop
        End With
        
        startConnect = True
    End Function
    

    Trus pengecekannya pada saat kapan? Apakah menggunakan timer atau manual pada saat menekan tombol tertentu ?

  5. horas
    June 24, 2010 at 11:25 am

    menggunakan timer om.

    • June 24, 2010 at 11:33 am

      Klo kode perulangan untuk koneksinya udah sama ya?

      Trus saran saya coba tambahkan pencatatan file log (aplikasi server) pada event ConnectionRequest, DataArrival dan Error untuk mencatat status winsocknya.

      Kemudian coba restart server untuk mengetahui apakah event2 tersebut merespon request koneksi dari klien selama proses startup windowsnya.

  6. horas
    June 24, 2010 at 11:47 am

    Oke om, ya jalan terakhir harus di-log untuk mencari penyebab pastinya.
    thanks ya om…

    • June 24, 2010 at 11:58 am

      Oke om, sy tunggu sharenya klo udah case closed🙂

  7. IT
    August 20, 2010 at 12:50 am

    Mau tanya donk teman2x?jika kita ada proxy server bagaimana kita terkoneksi antara server dan client?ada ide?
    thanks bravo

    • August 20, 2010 at 3:36 am

      Belum ada om, sy belum ngerti maksudnya😀

      • IT
        August 21, 2010 at 4:19 pm

        oh jadi saya kan ada server dengan IP PUBLIC, lalu client ingin mengirim data ke ip public tersebut. tetapi clientnya ini harus melalui proxy server. apakah bisa?

  8. August 22, 2010 at 7:50 am

    Saya belum pernah coba tetapi, ini ada tutorial bagus yg membahas masalah ini.

  9. antique
    August 27, 2010 at 11:43 am

    omm…saya mw nnya lagi neh😀 aplikasi chat client server na udah saya coba di LAN…. ( saya lupa kemaren posting di artikel yang mana )
    aplikasi nya knp ga konek ya?? saya dapat pesan error “CONNECTION IS FORCEFULLY REJECTED”…itu kira2 knp yaa??? apa karna port nya?? (saya masih pake port sample yg dikasih “11111”)….atau karna hak akses nya dibatasi oleh server ( saya login tidak menggunakan administrator di pc tsb ) ?? cara ngatasi na gimna?? makasih omm

    • August 27, 2010 at 11:01 pm

      Kemungkinan masalah di firewallnya, jadi solusi yg bisa dicoba :
      1. Non aktifkan windows firewall
      2. atw windows firewall tetap aktif tetapi daftarkan port “11111” nya ke window firewall

  10. antique
    August 27, 2010 at 11:45 am

    mksud na aplikasi omm yg winsock3rev1 ntu..

  11. kunta
    September 29, 2010 at 4:18 pm

    om,ada tutorial vb6 untuk pesan iso8583?klo ada mohon petunjuknya,terimakasih sebelumnya🙂

    • October 4, 2010 at 12:54 am

      Sory om belum ada

  12. bolomy
    December 26, 2010 at 11:24 pm

    om, saya mau tanya ni
    bisa ga kalau misalnya program chatnya untuk bagian IP kita pake combobox yang isinya otomatis menampilkan ip semua komputer yang sedang aktif di dalam jaringan?
    Terimakasih

    • December 27, 2010 at 2:18 am

      Yang jelas bisa om, coba dimodif contoh yg ada disini, disitu menampilkan semua klien yang aktif ke ListBox.

      • bolomy
        December 27, 2010 at 3:36 am

        oke om, saya coba dulu terimakasih banyak

        • December 27, 2010 at 5:26 am

          Sama2x om

  13. fahrudin
    July 18, 2011 at 6:08 am

    thanks bos………….. artikelnya keren abis,,,,,,,,,,,,,,,,,,,,, makaseh bgt poko’nya… semangat coding terus gan,,,, hehehe

    • July 18, 2011 at 7:21 am

      Oke om, tq udah mampir

  14. fahrudin
    August 5, 2011 at 11:45 am

    om,, ane maw nanya kalo maw bkin private chat dengan vb6 source codenya gmana,,, pake winsock juga saya baru bisa buat chat room aja,, broadcase jd dikirim kesemua klien yang connect, klo buat pruvate gmana ya om,,,, mohon bantuannya…🙂

    • August 5, 2011 at 1:44 pm

      Nah itu udah kren om bisa buat aplikasi chat room, ada aplikasi servernya enggak ?
      Klo ada validasinya disitu, misal untuk broadcast ke semua klien aktif pake perintah :

      send#isi pesan
      

      Tapi untuk private pake perintah :

      send_private#klien#isi pesan
      
  15. fahrudin
    August 6, 2011 at 12:52 am

    nah itu dya masalahnya om,,,, ane lom faham coding yang buat mgirim ke orang yang dituju… misal winsock udah listen 8 klient, trus ane dapet winsock index 1 dan temen ane dpet index 2, nah disitu bagaimana biar server nngebagi pesannya trus dikirim ke orang yang dituju hanya ke index 2, mohon bantuannya om,,, udah buntu bangr neh,,,, hehehe

    • August 6, 2011 at 1:40 am

      Jadi misalkan ada tabel khusus dg nama klien_aktif yg menyimpan informasi index winsock dan ip addressnya, jadi pass kita ngirim perintah :

      send_private#192.168.1.5#tess ngirim perintah private
      

      Di server tinggal query

      SELECT index FROM klien_aktif WHERE ip_address = '192.168.1.5'
      

      Nah setelah dapat indexnya kan tinggal kirim balik dari server :

      Winsock1(index).SendData = "tess ngirim perintah private"
      
  16. August 6, 2011 at 3:02 am

    ow berrti ane harus bikin database di my sql dlu dnk om,, cz database yang ane pake di server akses om,,,,

    • August 6, 2011 at 3:40 am

      Ya enggak masalah om

  17. August 6, 2011 at 3:42 am

    oke,,, ane coba dulu om,,,, makaseh banget ya,,,,, masih amatir ne om,,,, hehe

    • August 6, 2011 at 5:22 am

      Oke om sama2x🙂

  18. August 7, 2011 at 12:49 am

    om codingnya biar data(ip and index) klient yang masuk langsug otomatis kesimpan di database gmana ya, trus query buat di microsoft akses gmana ? maaf om banyak nanya,,,

  19. August 7, 2011 at 1:14 am

    om sudah saya coba,,,, tapi datanya ga terkirim ke orang yang dituju om,,,, kira2 salah apanya ya,,,,,,

    • August 8, 2011 at 1:50 am

      Coba copas ke sini om kode untuk menyimpan ip dan index plus kode waktu ngirimnya

  20. indosurya
    August 7, 2011 at 10:26 am

    om,saya mau tanya…kalo mau ngirim data (misal 8 bit) dari kartu komputer IC PPI 8255 dari satu PC ke PC yang laen lewat jaringan LAN (Komunikasinya paralel,Tp bukan lewat DB25 melainkan Slot ISA kartu komputer IC PPI 8255nya) caranya gmn ya pada winsocknya???? *kan kalo serial (DB9 ) dideklarasikan pake
    MS.comm.CommPort=…
    MS.comm.settings= “2400,N,8,1”
    MS.comm.InputLen=…
    MS.comm.PortOpen=….
    MS.comm.Output=…

    nah kalo lewat Slot Isa gmn??mohon dibantu ke email saya surya_elektro06@yahoo.co.id..
    terima kasih banyak..

    • August 8, 2011 at 1:49 am

      Sory om sy sendiri agak asing dg beberapa istilah yg om sebutkan😀, harap maklum sy bukan anak elektro atw teknik jadi belum bisa bantu😀

  21. fahrudin
    August 8, 2011 at 3:05 am

    om udah bisa om,,,, thnks banget ya,,, atas petunjuknya….. sukses terus deh buat codding 4ever,,,,🙂

    • August 8, 2011 at 4:07 am

      Oke sama2x om🙂

  22. August 12, 2011 at 4:09 pm

    Mas ADMIN, salam kenall…
    Kebetulan saya lagi ngerjain skripsi, kmrin saya bkin pet emulator tapi masih versi offline.. Sekarang mau dijadikan online jadi antar pet bisa saling battle dan berantem tapi saya sendiri masi bingung2 soal VPN server.. Padahal simple aja tukeran data antar Pet trus battle.. Bingung nyediain servernya lewat internet.. Ini saya masi pelajari winsock nya..
    Mau saya coba tes client server, tapi krna 1 pc gmna dijalankan ya? Kan biar jelas harus beda IP antara client dan servernya..

    Saya butuh byk bantuan mas nih, hehee.. ^^

    • August 12, 2011 at 10:27 pm

      Salam kenal juga om

      Iya, om bisa coba 1 pc dulu aja trus biar bisa jalan 2 sistem operasi om bisa coba VirtualBox.

      Sy sendiri juga menggunakan VirtualBox untuk ngetes program sebelum diluncurkan ke klien2x.

  23. August 13, 2011 at 7:54 am

    Kmrin saya donload Virtual PC kk admin, tapi pas ngecek IP nya sama pula..
    Nanti saya coba Virtual Box de.. Kk admin jgn kemana-mana.. Sering2 ol ajarin saya. Oke?

  24. August 13, 2011 at 8:30 am

    Kk masalah IP nya uda bisa.. Nah sekarang biar game saya bisa trkoneksi antar player 1 sama lain.. Saya pengen ceritakan konsepnya secara rinci.. Kk admin ada waktu tidak? Maaf saya beneran newbie soal jaringan bgini.. Hehee..

    • August 15, 2011 at 1:20 am

      Ceritanya disini aja om enggak pa2x kok, soalnya sy jarang OL

  25. August 13, 2011 at 8:53 am

    Kalo pke hamachi repot juga ya, perlu nyeting di network connectionnya kk admin..

    • August 15, 2011 at 1:22 am

      Makanya mendingan fokus dulu uji cobanya menggunakan Virtual PC atw Virtual Box sama aja biar lebih gampang testing dan developnya.

      Klo besok2x mau diimplementasikan di jaringan lokal atw intenet sy rasa enggak ada masalah dg programnya toh itu hanya masalah koneksi saja.

  26. August 17, 2011 at 6:11 pm

    Hehee.. Sudah bisa kk admin.. Uda jalan secara jaringan cuma ini kan lewat virtual PC..
    Cuma saya di dalam virtual PC pas battle na kayak agak macet gtu.. Krna dy mulai bersamaan.. Yang di virtual PCnya agak lelet, mgkin pembagian RAM..

    Maaf kk saya mau tnya lagi, ini gw pke IP na 192.168.1.2 9 (asli) ama 192.168.1.3 (virtual)..

    Blm coba pke IP publik.. Atau saya perlu pke IP dari hamachi kk? Jadi saya share ke pengguna hamachi yg laen dan tes pke IP dari sana.. dan portnya itu acak gpp kan?

    • August 18, 2011 at 1:14 am

      Atw coba dulu om 2 pc pake kabel cross untuk masalah port kan tergantung aplikasi om menghandlenya gimana

  27. August 18, 2011 at 11:36 am

    Umm kalo di app saya portnya isi manuall.. Jadi di PC1 ama PC2 harus masukin port yg sama.. Saya pengennya para user gak perlu repot sama isian port.. Jadi otomatis.. cukup masukin ip lawan.. Trus mulai deh. Sipp aq cari2 dlu..😀

    • August 18, 2011 at 12:01 pm

      Ya tetap harus ada default port om, sama seperti database MySQL yg menggunakan default port 3306, SQL Server port 1433, radmin port 4899, HTTP port 80 de el el.

      Tapi tentunya disediain juga fasilitas untuk merubahnya.

  28. August 23, 2011 at 2:58 am

    Oke kk saya ngerti sekarang hehehee.. Siappp!!! THanks banyakk kk buat tutor2 nya juga.. hehe

    • August 24, 2011 at 2:10 am

      Sama2x om🙂

  29. indo
    October 5, 2011 at 8:04 am

    om kalo mau kirim data bukan tekt,,tp berupa string atau integer deklarasi dimensionnya gmana ya pada bagian event dataarrivalnya??(pada bagian program servernya)?

    • October 20, 2011 at 6:08 am

      Klo ini kayaxnya enggak masalah om, dicoba dulu aja

  30. baaloo
    October 17, 2011 at 6:35 am

    mas boleh nanya coding gak?…
    gimana kalo pemilihan pc di server berdasarkan penulisan di textbox?
    kan mas buat yg diserver list1 harus dipilih…gimana kalo pilihannya diketik di textbox mis :”PC 01″ gitu…

    • October 20, 2011 at 6:09 am

      Sama aja kan om, toh cuma ngampil nilai dari properties textnya

  31. October 22, 2011 at 9:46 am

    Heloo kk admin, ada dapat SMTP server yang gratis gak? SMTP yang “smtp.telkom.net” uda gak jalan..
    Kalau ada sekalian portnya ya.. Thanks

    • October 24, 2011 at 1:38 pm

      Wah jujur aja nih sy belum pernah main2x SMTP server om😀

  32. October 26, 2011 at 2:56 pm

    Ohh iya tapi koq saya di panggil om, masi 20tahun, hahaha..
    Makasi yah kk admin..😀

    • October 28, 2011 at 2:07 am

      Sama om sy juga 20 thnan tapi… beberapa tahun yg lalu😀

  33. December 18, 2011 at 10:00 am

    artikel keren dan sangat membantu, ini contoh aplikasi dari ilmu yang dibagikan disini. semoga allah merahmati kebaikan antum, salam.

    • December 19, 2011 at 12:44 pm

      Sama2x akh, klo liat sekilas aplikasinya kren nih.
      Kok enggak lansung share link aja😀

  34. January 13, 2012 at 8:28 am

    Mas Admin.. waktu di dataarrival saat getdata saya ketemu error berikut ini. ini kira2 masalahnya di mana mas? tks sebelumnya

    Run-time error ‘40006’
    Wrong protocol or connection state for the requested transaction or request

  35. sarjono
    January 14, 2012 at 11:29 am

    mas satu lagi …

    cara mengetahui respon di dataarrival telah selesai gimana codenya ya, solanya kirimannya/responya lebih dari satu kiriman/packet. Tks …

    • January 29, 2012 at 6:53 pm

      Coba postingan sy yg ini om, disitu ada contoh memotong packet yg panjang dikirim beberapa kali.

  36. Indon
    February 11, 2012 at 11:49 am

    Pagi Om, saya mau tanya. Bagaimana coding VB6 nya untuk bisa melihat jaringan yang ada di beberapa tempat yang berjalan dengan baik dan untuk koneksinya antar tempatnya pakai ip publik dari logmein hamchi. Contohnya, Misalkan saya ada di tempat A dan saya pengen tau jaringan di tempat B itu berjalan dengan baik tanpa ada RTO nya, tanpa saya harus remote ke tempat B. Saya coba kembangkan dari CekIPAktive dan Winsok5 nya punya Om, tapi masih belum berhasil. Mohon Pencerahannya Om, terima kasih…

    • February 13, 2012 at 9:15 am

      Klo diping biasa bisa enggak om ?

      • Indon
        February 14, 2012 at 8:39 pm

        klo ping manual, bisa OM.. Cuman saya bingung koneksi ke hamchi nya terus baru masuk ke server lokasi B nya. itu yang saya masih bingung codingnya… Mohon bantuan nya Om…

        • February 15, 2012 at 8:38 am

          Jadi intinya cuma pengen ngePING tapi dari VB iya enggak ? Klo iya coba pake module PING, trus tinggal panggil seperti berikut :

          Private Sub cmdTesPing_Click()
              Dim ECHO    As ICMP_ECHO_REPLY
              
              Call Ping("192.168.1.2", ECHO)
              
              If ECHO.status = 0 Then 'koneksi ke server sukses
                  Debug.Print "Koneksi oke"
              Else
                  Debug.Print "RTO"
              End If
          End Sub
          
  37. arief
    February 25, 2012 at 3:33 pm

    mas maaf mau tanya, sy lg coba-coba bkin sistem antrian berbasis client server yg multi client, tp sy msih bingung mslh di codingnya, jd pas di client di klik tombol antrian itu akan mengecek no antrian yg terakhir yg ada di server lalu akan menembahkan no_antrian+1 di servernya dan otomatis mengirimkan lg ke client tersebut nomor antriannya..
    Mohon pencerahannya, maaf masih newbie..

    • February 26, 2012 at 9:38 am

      Postingan sy diatas udah dicoba belum om ??? Klo enggak ya pasti bingung ???

      Padahal sy sudah pernah menulis artikel lengkap tentang winsock mulai dari artikel satu, dua, tiga dan empat😀.

      Klo om sudah mempelajari postingan sy diatas secara serius jangankan cuma aplikasi antrian om, aplikasi billing warnet juga bakalan bisa om buat🙂.

      Buktinya ada yg berhasil menerapkan sample diatas untuk membuat aplikasi antrian

      Kita sebagai seorang programmer sebenarnya cukup membutuhkan 1 titik cahaya, sisanya kita akan cari sendiri.

      Tinggal duduk manis di depan komputer buka search engine, ketik keyword maka semua informasi akan menjadi milik kita, nah yg menjadi pertanyaannya adalah maukah kita bersabar untuk mengklik satu persatu link yg ada dan mencoba kode2x yg ada didalamnya ???

      Nah semangat ini yg jarang sy lihat pada orang2x yg katanya masih newbie, pengennya yg instan2x saja.

      Jadi jangan lihat skrg si A kok jago banget ya programmingnya, tapi lihat duluuuu si A itu belajarnya gimana.

      • June 4, 2012 at 2:18 am

        bener pak………
        tapi gue salut sama om, yang masih sabar menerima banyak question yang biasanya para mastah memilih untuk jawab “cari sendiri dong di google, usaha dong, jadi orang jangan males cari sendiri di google de el el”
        gue sangat salut om, kesetiaan bapak “GURU” dalam menjawab keluh kesah kami para “ANAK DIDIKNYA”
        makasih om saya cuma bisa bantu dengan do’a

        • June 4, 2012 at 10:31 am

          Amin🙂

          Nah klo om sendiri masuk kelompok yg mana ?😀

  38. marta
    April 4, 2012 at 7:32 pm

    ms..mau nny, kl multiple connection menggunakan winsock di game penerapanny gmn y ms?..ms d g referensiny terutama di gameny?,kl blh mo mnta,he soalny lg ngerjin TA ttg game jaringan buat tambahan referensi,mksh

    • April 4, 2012 at 7:47 pm

      Coba disini.

  39. Faqih Arwani
    May 6, 2012 at 7:00 pm

    mas itu kan pake vb6 gw pengen pake vb.net nah gw bingung di indexnya. itu create indexnya dimana y?

    • May 7, 2012 at 8:30 am

      Klo di VB .NET sudah ada class tersendiri om, klo untuk samplenya bisa dicek disini.

      • Faqih Arwani
        May 7, 2012 at 8:57 am

        ko jadi command prompt gitu y?
        gw coba dulu deh

  40. Faqih Arwani
    May 9, 2012 at 11:42 am

    misalkan kita pake code di atas tapi kita bikin index sendiri apa itu memungkinkan?

    • June 4, 2012 at 10:35 am

      Wah ada pertanyaan yg terlewatkan toh, mudah2xan udah case closed😀

  41. June 7, 2012 at 11:05 am

    Bro, saya ada error disini di sisi server:
    Winsock1.SendData txtChat.Text
    Sedangkan saya sudah index Winsocksnya (sudah dibuat array) nah misalnya saya ganti dengan Winsock1(0), ternyata yang dikirimi pesan cuman yang di Winsock1(0), sedang yang lain ternyata tidak bisa. Ada solusi khah? Makasih sebelumnya.

    • June 7, 2012 at 12:42 pm

      Klo sample asli dari postingan diatas udah dicoba belum om ?

  42. mamatajah
    August 30, 2012 at 7:37 pm

    hallo guru.. maaf nih saya panggil guru aja ya…
    contoh aplikasi saya donlot, sedikit saya modif.. dengan tujuan sedikit “test cases” pada prinsipnya hasil sukses.. pake proxi, pake ip publik, pake multi router, dll…. nah pada satu casus saya baru menemukan sedikit troubel.. saya ingin coba… kira-kira dalam list yang kondisinya disconnect saya ingin hapus… eh tiap jalan send malah ngapus semuanya dalam list… padahal status client sedang aktif… trus.. kalau di restart client.. server ga respon lagi.. uhh.. buntu nih saya guru.. mohon pencerahannya guru… thx buanyak…

  43. cupu cupu liar
    October 8, 2012 at 12:37 am

    om mau tanya…kok project saya winsock.statenya bernilai 6 alhasil gak mau koneksi, itu kenapa yach???

  44. October 8, 2012 at 8:35 am

    Sample sy diatas dicoba dulu di komputer lokalan, utk meminimalisasi tingkat kegagalan koneksinya.

  45. October 17, 2012 at 11:57 am

    saya coba di komputer yang sama gak bisa,,jadi harus pake 2 komputer ya mas?

  46. marta
    November 22, 2012 at 3:47 am

    mas..d rferensi terkait winsock g?..sy pengen tau lebih banyak lagi
    oh y sy masih belum paham bedanya p to ms winsock yg menggunakan array dg yg menggunakan beberapa winsock? .. mksh

  47. dimas
    January 11, 2013 at 4:35 pm

    mas sya coba aplikasi ini untuk d sambung k aplikasi clien server java…yang jadi masalah kenapa hanya bisa saat vb nya menjadi klien dan java sbg server ,, sedangkan saat di balik keadaannya itu tidak bisa konek mas .. mohon pencerahannya😀

    • January 11, 2013 at 4:52 pm

      Harusnya bisa om socket itu kan metode standar untuk komunikasi via jaringan jadi apa pun bahasa pemrogrammnya seharusnya enggak masalah.

      Untuk menjadi server, socketnya kan harus dalam mode listening

      • dimas
        January 21, 2013 at 8:44 am

        makasi mas sudah bs yg kemarin🙂..
        sekarang saya mau nanya lg mas,,mas punya tutorial untuk membuat aplikasi klien server yg mempunyai sistem buffering sampai ada suatu kondisi terminate untuk memproses data selanjutnya apa tidak..dalam kasus ini data yang akan dikirim dan diproses berupa string..

        • January 21, 2013 at 9:33 am

          Udah coba contoh yg disini belum om ?

          Pembahasan inti di postingan tersebut adalah bagaimana mengirim data berupa string dalam jumlah banyak dengan cara memecahnya menjadi beberapa bagian dari sisi klien dan menggabungkannya di sisi server.

          • dimas
            January 21, 2013 at 10:06 am

            udah saya coba mas..di contoh itu kan datanya dipecah berdasarkan length ya..nah maksud saya mas koneksi kan kadang putus ya..sementara terkadang data sudah masuk k server sebagian..tp server itu jgn langsung proses mas tp menunggu dulu data sisanya tersebut..nah yg saya mau nanya seperti itu mas,,bagaimana cara menunggu data sisanya karena server disini memproses secara otomatis..

            terima kasih mohon pencerahan karena saya sudah cari” masih buntu mas🙂

            • January 21, 2013 at 10:43 am

              Makanya ditambahkan aja om karakter penanda disetiap akhir data yg dikirim, misal ditambahkan karakter *

              strData = "ini data yang mau dikirim*"
              

              Nah diserverkan tinggal cek klo data yg dikirim diakhiri dg karakter * berarti datanya sudah komplit dan siap untuk diproses.

              • dimas
                January 21, 2013 at 10:46 am

                ohh gt saya coba dulu mas makasi🙂

                • January 21, 2013 at 2:22 pm

                  Oke sippp🙂

                  • dimas
                    January 23, 2013 at 10:21 am

                    maaf nih mas ane msh ada yg gagal pada saat penggabungan package padahal udah saya ikutin logika dan sourcenya mas..kira” ada salah dimana ya mas?? terima kasih..

                    Private Sub sock_dataarrival(ByVal bytestotal As Long)
                    Dim strData As String
                    Dim buffer As String
                    Dim packageHdr As String

                    sock.GetData strData, vbString, bytestotal
                    If Right(strData, 1) = Chr(3) Then
                    Call OutPut(strData)
                    Else
                    buffer = buffer & strData
                    If InStr(1, strData, Chr(3)) > 0 Then packageHdr = packageHdr & Chr(3)

                    If Len(packageHdr) = 2 Then Call OutPut(buffer)
                    End If
                    End Sub

                    • January 24, 2013 at 4:39 pm

                      Emg salahnya berupa error atw gimana om ?

  48. saor
    January 17, 2013 at 2:51 pm

    saya lagi coba2 jalankan program multi client, tapi terdapat error di bagian sub form_loadnya, tolong donk bantuannya, thx

  49. saor
    January 17, 2013 at 2:53 pm

    saor :
    saya lagi coba2 jalankan program multi client, tapi terdapat error di bagian sub form_loadnya, tolong donk bantuannya, thx
    saya ganti ip server nya jadi 192.100.100.1, gmn y?

    • January 19, 2013 at 10:03 am

      Dicoba dulu di komptuer yg sama menggunapan ip 127.0.0.1

  50. dimas
    January 25, 2013 at 8:20 am

    ga error mas tp datanya ga bisa nyambung antara pengiriman yg pertama dan yg kedua..jadi data yg muncul hanya data yg kedua mas yg d akhiri chr3 tsb..

    • January 27, 2013 at 5:37 pm

      Di coba di debug.print dulu om diserver untuk melihat data yg diterima di server seperti apa.

      • dimas
        January 31, 2013 at 9:43 am

        ga kesimpan mas ternyata kiriman yg pertama ,, pas d kirim yg kedua ternyata hanya data yg kedua aja yg muncul karena yg pertama ga kesimpan..gimana ya mas solusinya??

  51. Ary
    February 8, 2013 at 10:21 am

    Halo, mas mo tanya, klo penggunaan winsock utk chatting kan hanya kirim pesan berupa text string aja tu, nah gimana klo saya dari client mo kirim data misalnya seperti ini:

    FrmClient.WinsockClient.SendData TxtUsername.Text
    FrmClient.WinsockClient.SendData TxtJamMulai.Text
    FrmClient.WinsockClient.SendData TxtJamBerhenti.Text
    FrmClient.WinsockClient.SendData TxtDurasi.Text
    FrmClient.WinsockClient.SendData TxtBiaya.Text

    Trus di sisi servernya si data2 itu mo di masukin ke kolom2 listview, pembagiannya itu gimana ya, apakah si variabelnya jg harus 5, misal strdata1, strdata2, dst.

    Kalo dari artikel winsock yang bagian akhir dah dicoba, tapi pas diterapin, munculin datanya di listview nya malah jadi ga beraturan, bingung jadinya.
    Mohon bantuannya mas admin.

    • February 8, 2013 at 10:53 am

      Data yang ingin dikirim digabung menjadi satu, jadi prosesnya cukup sekali kirim aja :

      Dim data As String
      
      data = TxtUsername.Text & "#" & TxtJamMulai.Text & "#" & TxtJamBerhenti.Text & "#" & TxtDurasi.Text & "#" & TxtBiaya.Text
      FrmClient.WinsockClient.SendData data
      

      Perhatikan data di atas dipisahkan berdasarkan karakter #.

      Dari sisi server datanya dipecah lagi berdasarkan karakter #

      Private Sub WinsockServer_DataArrival(ByVal bytesTotal As Long)
          Dim strData     As String
          Dim arrData()   As String
          
          ' get the data from the socket
          WinsockServer.GetData strData
          
          ' pecah data yg diterima dari klien berdasarkan karakter #
          arrData = Split(strData, "#")
          
          ' tampilkan datanya
          Debug.Print "user name : " & arrData(0)
          Debug.Print "jam mulai : " & arrData(1)
          Debug.Print "jam berhenti : " & arrData(2)
          Debug.Print "durasi : " & arrData(3)
          Debug.Print "biaya : " & arrData(4)
      End Sub
      
  52. balqis
    May 17, 2013 at 8:57 am

    mas kalo utk remote host yang ada username dan passwordnya dgn winsock gmn ya ? terima kasih

    • June 25, 2013 at 12:50 pm

      Klo untuk remote hostanya ya enggak bisa di password om, jadi solusinya pada saat mengirim perintah ke server perintahnya di tambah username dan password. Contoh :

      Dim perintah As String
      
      perintah = "user_name#password#isi data"
      Winsock1.SendData perinta
      

      Nah pada saat perintahnya sudah diterima di server, aplikasi server tinggal memparsing/memecah data yg diterima kemudian memverifikasi username dan passwordnya.

  53. oopick
    June 30, 2013 at 10:29 am

    om mw buat program multi proxy..

    saya punya empat socks5 proxy masing port 1080,1081,1082,1083

    trus mw saya gabungkan dengan vb6, kira2 bisa ga ya?

    • July 1, 2013 at 12:41 pm

      Yg jelas bisa om, seperti contoh di atas, objek winsocknya dijadikan array

      • oopick
        July 2, 2013 at 7:35 pm

        ada contohnya om??

      • oopick
        July 5, 2013 at 9:11 am

        ayo lah pak dosen amikom buatin contoh nya,, ane di amikom ga di ajari dulu :v

        • July 5, 2013 at 9:23 am

          Si om pertanyaannya kurang jelas sih, itu proxynya ada di mana ? untuk melakukan koneksi itu kan membutuhkan ip dan port.
          Trus klo aplikasi vbnya udah konek mau ngapain ?

          • oopick
            July 10, 2013 at 12:13 am

            ane membuat tunneling ssh ke server dengan putty, output tunneling ssh tadi menghasilkan socks5 proxy ip: port 127.0.0.1:1080
            127.0.0.1:1081
            127.0.0.1:1082

            biasaya hasil tunneling tadi ane pakai buat browsing om, tingal masukan di pengaturan proxy dari ip:port 127.0.0.01:1080

            saya mw mencoba mengabungkan 127.0.0.1:1080, 127.0.0.1:1081, 127.0.0.1:1082 dengan vb, tapi masi binggung caranya

            sekarang saya menggunakan program udah jadi seperti ini http://multiproxy.org/mproxy12.zip

            • July 17, 2013 at 2:27 pm

              Coba seperti ini om :
              1. Siapkan tiga buah objek Winsock yang sudah diset sebagai objek array dg masing2x index 0, 1, 2
              2. Kemudian copas kode berikut :

              Private Function startConnect(ByVal Index As Integer) As Boolean
                  Dim timeOut     As String
                  Dim currentTime As String
                  
                  On Error GoTo errHandle
                                  
                  If Winsock1(Index).State <> sckClosed Then Winsock1(Index).Close ' close existing connection
                  Call Winsock1(Index).Connect
                  
                  currentTime = Format(Now, "hh:mm:ss")
                  timeOut = Format(TimeValue(currentTime) + TimeValue("00:00:01"), "hh:mm:ss")
                  DoEvents
                  
                  With Winsock1(Index)
                      Do
                          currentTime = Format(Now, "hh:mm:ss")
                          DoEvents
                      Loop Until (.State = sckConnected) Or (TimeValue(currentTime) > TimeValue(timeOut))
                  
                      startConnect = (.State = sckConnected)
                  End With
                  
                  Exit Function
              errHandle:
                  startConnect = False
              End Function
              
              Private Sub cmdTesKoneksi_Click()
                  Dim i As Integer
                  
                  For i = 0 To Winsock1.UBound
                      If startConnect(i) Then
                          Call Winsock1(i).sendData("tesss data yg dikirim")
                      End If
                  Next
              End Sub
              
              Private Sub Form_Load()
                  With Winsock1(0)
                      .RemoteHost = "127.0.0.1"
                      .RemotePort = 1080
                  End With
                  
                  With Winsock1(1)
                      .RemoteHost = "127.0.0.1"
                      .RemotePort = 1081
                  End With
                  
                  With Winsock1(2)
                      .RemoteHost = "127.0.0.1"
                      .RemotePort = 1082
                  End With
              End Sub
              
              Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
                  Dim strDataMasuk    As String
                  
                  Winsock1(Index).GetData strDataMasuk
                  DoEvents
                  
                  Debug.Print "Data yang masuk : " & strDataMasuk
              End Sub
              
      • oopick
        July 18, 2013 at 3:05 pm

        trus cara menggunakannya gemana om?

        • July 18, 2013 at 3:34 pm

          Om buat project baru trus tinggal copas kode di atas dan liat hasil debug.printnya seperti apa

          • oopick
            July 18, 2013 at 7:05 pm

            tadi saya dah buat yg seperti itu dengan command 1 biji, tapi ga tau hasilnya,

  54. October 23, 2013 at 3:59 pm

    di vb saya
    g ada
    winsock1.ubound
    itu knp y?

    • October 23, 2013 at 4:10 pm

      maksud saya
      kan tidak ada fungsi ubound dari winsocknya

      • October 23, 2013 at 7:39 pm

        Seharusnya klo om benar2x membaca postingan sy di atas, om enggak perlu menanyakan masalah ini, jawabannya ada di paragrap ketiga.

  55. December 7, 2013 at 2:43 pm

    Terima kasih Bang Admin, tutorial bagus sekali, bisa bermanfaat buat saya,
    semua lancar, ada kendala dikit, heheh…
    kenapa ya server tidak bisa menerima pesan dari klient, apabila server, pernah menjalankan msgbox….,

    salam dari saya…makasih sebelumnya

    • December 23, 2013 at 1:54 pm

      Ada error atau gimana om ?

  56. February 27, 2014 at 11:10 am

    admin, terima kasih tulisannya bagus.

    mau nanyak kalau di VB.net 2010 apa bisa menggunakan kode di atas ?

  57. March 11, 2014 at 1:24 am

    keren bang.. btw itu winshock array nya g bisa buat send data ta?

  58. March 11, 2014 at 1:32 am

    hehehe g jadi tanya bang ternyata dah bisa trimkasih artikelnya.. sangat membantu😀

    • March 11, 2014 at 8:34 am

      Oke om, senang bisa membantu🙂

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: