Send Data From Python to VB.Net Via Socket
Ini merupakan tulisan pertama saya yang berkaitan dengan coding, adanya metode socket ini adalah untuk mengefisiensi kan rute dalam membaca data. Seperti kita ketahui pada umumnya, bahwasanya jika kita ingin mendapatkan data secara aktual, misal kita menggunakan python sebagai program backend untuk menginsert data ke database dan VB.Net berfungsi sebagai User Interface yang menampilkan data pada layar dekstop anda, maka akan kurang efisien karna cara mengirim data adalah seperti pada gambar (1)
Cara pada gambar (1), tidak asing bagi kita untuk melakukan pengiriman ke VB.Net, namun akan terlihat kurang efisien dikarenakan python harus mengirim ke database dan VB.Net menerima data tersebut, sehingga dari permasalahan tersebut akan dicoba alternatif pengiriman data yang lebih efisien seperti pada gambar (2)
Pertama, buka python anda (dalam trial ini saya menggunakan python di visual studio code), setelah buka python ketikkan/copy paste code dibawah:
import socket #memuat modul/library socket untuk koneksi ke vb.net
import random #memuat modul/library untuk data angka random
import time #memuat modul/library untuk jeda pengiriman data
# Membuat objek socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Mengikat socket ke host publik dan port tertentu yang sama dengan vb.net
server_address = ('localhost', 9000)
sock.bind(server_address)
# Mendengarkan koneksi masuk
sock.listen(1)
# Menunggu koneksi masuk
print('Menunggu koneksi masuk...')
conn, client_address = sock.accept()
print('Koneksi dari', client_address)
# Loop untuk mengirim data dalam stream3
i=1
while True: # Membuat fungsi looping secara terus-menerus
# Memperbarui data variabel di sini
# Mengirim data angka random
data1 = "{:.2f}".format(random.uniform(1, 100))
# Mengirim data waktu random
data2 = str(time.time())
# Mengirim data angka secara urut
i += 1
data3 = str(i)
# Menampilkan hasil yang dikirim pada cmd python
print('Mengirim:', data1, data2, data3)
# Mengirim data ke vb.net
conn.sendall(bytes(data1 + ',' + data2 + ',' + data3, 'utf-8'))
# Jeda waktu pengiriman data
time.sleep(1.0)kedua, buka visual basic studio dan pilih bahasa VB.Net untuk membuat User Interface dengan tampilan seperti pada gambar (3) atau anda bisa menyesuaikan desain/tampilan yang anda harapkan.
Get Achmad Wildan’s stories in your inbox
Join Medium for free to get updates from this writer.
Ketiga, pindah tampilan anda untuk edit code pada Form1, kemudian ketikkan/copy paste code dibawah:
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Public Class Form1
Private conn As New TcpClient()
Private thread As Thread
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnCon.Click
Shell("cmd.exe /k python pytrialSocket_3.py", AppWinStyle.MinimizedFocus)
Try
conn.Connect("localhost", 9000)
thread = New Thread(AddressOf ReceiveData)
thread.Start()
btnCon.BackColor = Color.LightGreen
Label1.Text = "Connected to Python"
Label1.ForeColor = Color.DarkGreen
Catch ex As Exception
Label1.Text = "Failed to Connected to Python"
btnCon.BackColor = Color.Red
Label1.ForeColor = Color.Red
End Try
End Sub
Private Sub ReceiveData()
While True
Try
' Menerima data dari server
Dim bytes(conn.ReceiveBufferSize) As Byte
Dim stream As NetworkStream = conn.GetStream()
stream.Read(bytes, 0, conn.ReceiveBufferSize)
Dim receivedData As String = Encoding.ASCII.GetString(bytes).TrimEnd(ControlChars.NullChar)
' Memperbarui GUI dengan data yang diterima
Invoke(Sub()
txtScreen1.Text = receivedData.Split(",")(0)
txtScreen2.Text = receivedData.Split(",")(1)
txtScreen3.Text = receivedData.Split(",")(2)
End Sub)
Catch ex As Exception
' Mengatasi exception
Exit While
End Try
End While
' Menutup Koneksi
conn.Close()
End Sub
End ClassKeempat, pastikan code tidak ada yang salah dan pastikan port antara python dan VB.Net sudah sesuai (dalam trial ini saya menggunakan port 9000 atau anda juga bisa menyesuaikan port sesuai keinginan anda). Setelah anda memastikan, jalankan VB.Net dengan klik tombol run icon play (seperti pada gambar (4)) di menu bagian atas atau anda juga bisa menggunakan shortcut yaitu tekan F5.
Kelima, setelah anda berhasil menjalankan VB.Net, jangan klik tombol “Connect” dikarenakan tombol tersebut belum berfungsi karena data yang bersumber dari python belum dijalankan. Maka jalankan code python tersebut dengan cara klik tombol run yang berada di pojok kanan atas (seperti pada gambar (5)) atau ketikkan pada terminal “python .\pytrialSocket_3.py” (seperti pada gambar (6)).
Keenam, jika python dan VB.Net telah running, maka barulah anda bisa klik tombol “Connect” yang kemudian ada 3 data akan masuk secara stream yaitu: 1) data angka random, 2) data waktu random, 3) data angka berurutan mulai dari angka 1. Jika berhasil seperti pada gambar (7), maka selamat!… anda sudah bisa menghubungkan dan menampilkan data dari python ke VB.Net secara aktual tanpa memerlukan database lagi.
Note:
1. Menghubungkan dari python ke VB.Net akan lebih cocok jika data yang dikirim bersifat tidak harus disimpan di setiap data yang dikirim, karna kekurangan dari cara ini adalah jika anda mengalami trouble koneksi maka python berhenti dan data tidak bisa terkirim ke VB.Net, sebetulnya bisa saja anda mengakali agar python tetap berjalan meskipun trouble, tinggal bagaimana anda improve sendiri pengetahuan terhadap syntax yang tersedia di python.
2. Jika anda menggunakan cara ini, pastikan bahwa koneksi jaringan anda atau perusahaan anda dalam kondisi normal, karna jika terdapat masalah pada koneksi dapat menyebabkan gangguan error data.




