BAB 4 PROTOKOL TCP UDP - REMOTE Daftar Isi: Pendahuluan ......................................................................................................................... 1 UDP Remote ......................................................................................................................... 2 UDP Server ........................................................................................................................ 2 Komunikasi Program client server UDP – Remote ................................................................. 4 UDP Client ......................................................................................................................... 7 TCP Remote .......................................................................................................................... 8 TCP Server dengan console ................................................................................................. 10
PENDAHULUAN
Dalam modul ini akan dijelaskan secara garis besar apa yang akan kita pelajari, yaitu: •
• •
Menggabungkan modul sebelumnya yaitu system windows. Terdapat dua aplikasi yaitu aplikasi client dan aplikasi server. Aplikasi client akan mengirimkan pesan, misalkan cpu, maka aplikasi client menerima pesan tersebut dan menjalankan program untuk mendapatkan sistem informasi CPU di komputer server yang selanjutnya hasil tersebut akan dikirimkan ke aplikasi client, dan aplikasi client menampilkan informasi cpu komputer server. Aplikasi yang akan diterapkan yaitu aplikasi TCP Server dan aplikasi TCP Cient. Serta UDP Server dan UDP Client. Pengujian system windows seperti yan dilakukan modul sebelumnya yaitu mendapatkan username, system cpu, memori, proses dan lainnya.
Bab 4 Protokol TCP UDP - Remote
Hal. 1
UDP REMOTE UDP SERVER
Dalam aplikasi UDP Server, tampilan form seperti pada gambar dibawah ini dengan properti: •
Label
•
List Box
Gambar 1. 1
Dengan mempelajari program sebelumnya sistem windows, maka beberapa library kita daftarkan untuk mengenal perintah perintah baris program nantinya, dan tambahan untuk socket UDP maka beberapa tambahan library seperti System.NET dan System.Net.Sockets serta System.Threading. lengkapnya seperti dibawah ini: • • • • • • •
Imports Imports Imports Imports Imports Imports Imports
System.Threading System.Net System.Net.Sockets System.Text System System.Drawing Microsoft.Win32
Bab 4 Protokol TCP UDP - Remote
Hal. 2
•
Imports System.Diagnostics
Untuk mengenali pesan yang dikirimkan oleh UDP Client kemudian UDP Server melakukan fungsi program yang didefinisikan. Karena umumnya user dapat mengetikan apa pun, yang diinginkan. Kemudian kita set jika user mengetikan sesuatu..maka sesuatu itu akan diproses oleh server. Kita listkan apa yang akan diketikan oleh user, yaitu: •
User: untuk mendapatkan username server
•
Memori: untuk mendapatkan alokasi memori yang dimiliki server
•
R: untuk mendapatkan resolusi layar server
•
Reg: untuk mendapatkan nama prosesor dan detail dari CPU server.
Prosedur yang digunakan VB.NET menggunakan thread, sehingga kita tidak bisa secara langsung menggunakan objek yang digunakan, misalkan dalam program kita menggunakan listbox.items.add (“pesan”) ke proses pengiriman server ke client. VB.NET tidak dapat menggunakan thread dari listbox secara berulang-ulang. Untuk mensiasati hal tersebut, maka digunakan sebuah prosedur, ketika listbox digunakan maka listbox akan di hapus atau direstart kembali untuk dapat digunakan. Jika di program pada baris dibawah ini untuk memanggil kembali thread listbox Private Sub UpdateLblStatus(ByVal tempStr As String) ListBox1.Items.Add(tempStr) End Sub
Dan untuk melepas /merestart listbox anda dapat melihat fungsi dari Private Sub UpdateLblStatusThreadSafe(ByVal tempStr As String)
Dan variabel Private Delegate Sub updateLblStatus_dlgt(ByVal tempStr As String) digunakan untuk variabel global dalam sebuah form. Port yang akan digunakan adalah 8080. Anda dapat mengganti dengan angka yang lain, yaitu dari 1024 sampai 65.000. dengan catatan nantinya aplikasi client menginputkan data ip server dan port server yang sesuai. Anda dapat lihat baris program Dim udpClient100 As New UdpClient(8080) untuk menset port yang digunakan di prosedur serverThread. Dan untuk mengaktifkan UDP server baris program dilakukan di Bab 4 Protokol TCP UDP - Remote
Hal. 3
Private Sub udpserver_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
saat program dijalankan oleh server
maka program UDP langsung aktif. Ketika aplikasi server menerima koneksi dari aplikasi client. Maka aplikasi server menunggu selalu aplikasi client untuk pesan yang akan diterima dan melakukan proses sesuai dengan identifikasi yang kita telah setting sebelumnya. Jika anda perhatikan dibaris prosedur Public Sub serverThread(), maka terdapat perintah while true untuk menyatakan
apakah ada pesan masuk atau tidak. Untuk proses penerimaan pesan dari client ke server. Dalam VB.NET proses mendapatkan pesan. Aplikasi server akan menerima dalam bentuk byte. Proses byte ini akan ditampung kedalam sebuah varibel, kemudian untuk menampilkan di terjemahkan kedalam bentuk string. Contoh kode program yang digunakan: receiveBytes = udpClient100.Receive(RemoteIpEndPoint) Dim returnData As String = Encoding.ASCII.GetString(receiveBytes) a = RemoteIpEndPoint.Address.ToString() + " Pesan: " + returnData.ToString UpdateLblStatusThreadSafe(a) KOMUNIKASI PROGRAM CLIENT SERVER UDP – REMOTE
UDP Client mengirimkan pesan “user” ke UDP Server, maka UDP Server menampilkan user yang digunakan di komputer UDP Server. UDP Client mengirimkan pesan “memori” ke UDP Server, maka UDP Server menampilkan memori yang digunakan di komputer UDP Server. UDP Client mengirimkan pesan “r” ke UDP Server, maka UDP Server menampilkan resolusi r yang digunakan di komputer UDP Server. UDP Client mengirimkan pesan “reg” ke UDP Server, maka UDP Server menampilkan identifikasi, prosesor yang digunakan di komputer UDP Server.
Bab 4 Protokol TCP UDP - Remote
Hal. 4
Kode Program UDP Server Kode Program UDP Server Imports Imports Imports Imports Imports Imports Imports Imports
System.Threading System.Net System.Net.Sockets System.Text System System.Drawing Microsoft.Win32 System.Diagnostics
Public Class udpserver Private Delegate Sub updateLblStatus_dlgt(ByVal tempStr As String)
Private Sub udpserver_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim thdUDPServer = New Thread(New ThreadStart(AddressOf _ serverThread)) thdUDPServer.Start() End Sub Public Sub serverThread() Dim udpClient100 As New UdpClient(8080) Dim a, banding, c As String Dim bnds As Rectangle = My.Computer.Screen.Bounds Dim m_LM As RegistryKey Dim m_HW As RegistryKey Dim m_Des As RegistryKey Dim m_System As RegistryKey Dim m_CPU As RegistryKey Dim m_Info As RegistryKey m_LM = Registry.LocalMachine m_HW = m_LM.OpenSubKey("HARDWARE") m_Des = m_HW.OpenSubKey("DESCRIPTION") m_System = m_Des.OpenSubKey("SYSTEM") m_CPU = m_System.OpenSubKey("CentralProcessor") m_Info = m_CPU.OpenSubKey("0") While True Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0) Dim receiveBytes As Byte() receiveBytes = udpClient100.Receive(RemoteIpEndPoint) Bab 4 Protokol TCP UDP - Remote
Hal. 5
Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)a = RemoteIpEndPoint.Address.ToString() + " Pesan: " + returnData.ToString banding = returnData.ToString UpdateLblStatusThreadSafe(a) If (banding = "user") Then c = System.Environment.UserName UpdateLblStatusThreadSafe(c) End If If (banding = "memori") Then c = GC.GetTotalMemory(True) UpdateLblStatusThreadSafe(c) End If If (banding = "r") Then c = "Resolusi Layar: " & bnds.Width & " by " & bnds.Height UpdateLblStatusThreadSafe(c) End If If (banding = "reg") Then c = "Prosesor =" + m_Info.GetValue("VendorIdentifier") UpdateLblStatusThreadSafe(c) c = "Prosesor Name =" + Info.GetValue("ProcessorNameString") UpdateLblStatusThreadSafe(c) c = "Identifier = " + m_Info.GetValue("Identifier") UpdateLblStatusThreadSafe(c) c = m_Info.GetValue("~Mhz") & "MHz" UpdateLblStatusThreadSafe(c) End If End While End Sub Private Sub UpdateLblStatusThreadSafe(ByVal tempStr As String) Dim updateLblStatus_obj As updateLblStatus_dlgt
If ListBox1.InvokeRequired Then updateLblStatus_obj = New updateLblStatus_dlgt(AddressOf UpdateLblStatusThreadSafe) If Not updateLblStatus_obj Is Nothing Then ListBox1.Invoke(updateLblStatus_obj, tempStr)
Bab 4 Protokol TCP UDP - Remote
Hal. 6
End If Else Call UpdateLblStatus(tempStr) End If End Sub Private Sub UpdateLblStatus(ByVal tempStr As String) ListBox1.Items.Add(tempStr) End Sub
End Class UDP CLIENT
Tampilan UDP Client, ketika aplikasi ditampilkan user menginput alamat ip server, dan menginput pesan yang akan dikirimkan. Seperti tampil dibawah ini
Gambar 1. 2
Kode program
Imports System.Net Imports System.Net.Sockets Bab 4 Protokol TCP UDP - Remote
Hal. 7
Imports System.Text Imports System.IO Public Class udpclient1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim udpclient200 As New UdpClient udpclient200.Connect(TextBox1.Text, 8080) Dim sendBytes As Byte() sendBytes = Encoding.ASCII.GetBytes(TextBox2.Text) udpclient200.Send(sendBytes, sendBytes.Length) End Sub End Class Contoh Hasil Pengujian
TCP REMOTE
Pertama kali kita lakukan desain untuk TCP Client seperti pada gambar 1.3, user mengetikan input alamat server port, proses koneksi, jika selesai maka client mengirimkan pesan ke server, dan server akan mengirimkan balik pesan dari server.
Bab 4 Protokol TCP UDP - Remote
Hal. 8
Gambar 1. 3
Kode program yang digunakan untuk Kode Program TCP Client. Kode Program TCP Client Imports System.Net.Sockets Imports System.Text Public Class Form3 Dim clientSocket As New System.Net.Sockets.TcpClient() Dim serverStream As NetworkStream Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim serverStream As NetworkStream = clientSocket.GetStream() Dim a As String a = TextBox1.Text + "$" Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes(a) serverStream.Write(outStream, 0, outStream.Length) serverStream.Flush() ' ListBox1.Items.Clear() Dim inStream(10024) As Byte serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize)) Dim returndata As String = _ Bab 4 Protokol TCP UDP - Remote
Hal. 9
System.Text.Encoding.ASCII.GetString(inStream) msg("Data from Server : " + returndata) End Sub
Sub msg(ByVal mesg As String) 'ListBox1.Items.Clear() ListBox1.Items.Add(mesg) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click clientSocket.Connect(TextBox2.Text, TextBox3.Text) Label1.Text = "Client Socket Program - Server Connected ..." End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click clientSocket.Close() End Sub End Class TCP SERVER DENGAN CONSOLE
Selanjutnya kita membuat TCP Server, untuk hal ini tampilan server, tidak ada form dalam server ini, aplikasi berbentuk console.
Gambar 1. 4
Alur Komunikasi TCP Server dengan TCP Client.
Bab 4 Protokol TCP UDP - Remote
Hal. 10
Aplikasi Client jika mengirimkan pesan “andrew” maka TCP Server akan melakukan pembuatan file text.txt di komputer TCP Server. Aplikasi Client jika mengirimkan pesan “user” maka TCP Server akan proses nama user komputer TCP Server dan TCP Server akan mengirimkan ke TCP Client. Aplikasi Client jika mengirimkan pesan “detail” maka TCP Server akan melakukan proses spesifikasi CPU komputer TCP Server dan mengirimkan hasilnya ke TCP Client. Kode program pada TCP Server.
Imports Imports Imports Imports
Kode Program TCP Server System.Net.Sockets System.Text System.IO System.Drawing
Imports Imports Imports Imports
System Microsoft.Win32 System.Diagnostics System.Windows.Forms
Module Module1 Sub Main() Dim serverSocket As New TcpListener(8888) Dim requestCount As Integer Dim clientSocket As TcpClient Dim a, b As String Dim m_LM As RegistryKey Dim m_HW As RegistryKey Dim m_Des As RegistryKey Dim m_System As RegistryKey Dim m_CPU As RegistryKey Dim m_Info As RegistryKey m_LM = Registry.LocalMachine m_HW = m_LM.OpenSubKey("HARDWARE") m_Des = m_HW.OpenSubKey("DESCRIPTION") m_System = m_Des.OpenSubKey("SYSTEM") m_CPU = m_System.OpenSubKey("CentralProcessor") m_Info = m_CPU.OpenSubKey("0")
Bab 4 Protokol TCP UDP - Remote
Hal. 11
'Dim bnds As Rectangle = My.Computer.Screen.Bounds serverSocket.Start() msg("Server Started") clientSocket = serverSocket.AcceptTcpClient() msg("Accept connection from client") requestCount = 0 While (True) Try requestCount = requestCount + 1 Dim networkStream As NetworkStream = _ clientSocket.GetStream() Dim bytesFrom(10024) As Byte networkStream.Read(bytesFrom, CInt(clientSocket.ReceiveBufferSize)) Dim dataFromClient As String = _
0,
System.Text.Encoding.ASCII.GetString(bytesFrom) dataFromClient = _ dataFromClient.Substring(0, dataFromClient.IndexOf("$")) msg(dataFromClient) a = dataFromClient If a = "andrew" Then msg2("andrew if then") If File.Exists("d:\testFile.txt") Then 'shows message if testFile exist MsgBox("File 'testFile' Exist ") Else 'create the file testFile.txt File.Create("d:\testFile.txt") MsgBox("File 'testFile' created ") End If End If If a = "user" Then b = "user" + System.Environment.UserName Dim bi As [Byte]() = Encoding.ASCII.GetBytes(b) Encoding.ASCII.GetBytes(b) networkStream.Write(bi, 0, bi.Length) networkStream.Flush() End If If a = "detail" Then b = "Prosesor =" + m_Info.GetValue("VendorIdentifier") + " Nama prosesor" +
Bab 4 Protokol TCP UDP - Remote
Hal. 12
m_Info.GetValue("ProcessorNameString") Dim bi As [Byte]() Encoding.ASCII.GetBytes(b) Encoding.ASCII.GetBytes(b) networkStream.Write(bi, 0, bi.Length) networkStream.Flush()
=
End If 'kirim data Dim serverResponse As String = _ "Jawaban Server " Convert.ToString(requestCount) Dim sendBytes As [Byte]() = _ Encoding.ASCII.GetBytes(serverResponse) networkStream.Write(sendBytes, sendBytes.Length) networkStream.Flush() msg(serverResponse) Catch ex As Exception MsgBox(ex.ToString) End Try End While
+
0,
clientSocket.Close() serverSocket.Stop() msg("exit") Console.ReadLine() End Sub
Sub msg2(ByVal mesg2 As String) mesg2.Trim() Console.WriteLine(mesg2) End Sub Sub msg(ByVal mesg As String) mesg.Trim() Console.WriteLine(mesg) End Sub End Module
Bab 4 Protokol TCP UDP - Remote
Hal. 13
Contoh Hasil Pengujian TCP Remote
Bab 4 Protokol TCP UDP - Remote
Hal. 14