Visual Basic kullanarak bir sohbet programı yapmak oldukça mümkündür. Bu örnekte, bir istemci-sunucu modeli kullanarak basit bir sohbet programı yapacağız. İstemci, sunucuya bağlanacak ve mesajlarını gönderip alabilecek, sunucu ise bağlı tüm istemcilere gelen mesajları yayınlayacak.

Visual Basic ile Chat Programı Yapım Örneği Nasıl Yapılır?

İstemci tarafı için aşağıdaki adımları izleyebilirsiniz:

Yeni bir Windows Form uygulaması oluşturun ve form üzerinde iki adet TextBox (birincisi kullanıcı adını, ikincisi mesajı yazmak için), bir adet Button (mesaj göndermek için) ve bir adet RichTextBox (mesajları göstermek için) ekleyin.

Imports System.Net.Sockets satırı ile System.Net.Sockets ad alanını ekleyin.

İstemci tarafında bir TcpClient nesnesi oluşturun ve sunucuya bağlanın. Bağlantı başarılı olursa, bir NetworkStream nesnesi oluşturun ve mesajları okuyup yazmak için kullanın.

Mesajları yazmak için TextBox kontrolündeki metni NetworkStream nesnesi üzerinden sunucuya gönderin. Mesajlar okunduğunda, RichTextBox kontrolüne ekleyin.

Bağlantıyı kesmek için bir düğme ekleyin ve düğmeye tıklanınca sunucuya kapatma isteği gönderin.

İşte örnek bir Visual Basic istemci kodu:

vb.net

Imports System.Net.Sockets
Public Class Form1
    Private tcpClient As TcpClient
    Private stream As NetworkStream
    Private isConnected As Boolean

    Private Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
        Try
            tcpClient = New TcpClient()
            tcpClient.Connect(txtServer.Text, CInt(txtPort.Text))
            stream = tcpClient.GetStream()

            ' Sunucuya kullanıcı adını gönderin
            Dim username As String = txtUsername.Text
            Dim message As Byte() = System.Text.Encoding.ASCII.GetBytes(username)
            stream.Write(message, 0, message.Length)

            ' Okuma işlemi için bir arka plan görevi başlatın
            Dim receiveTask As New Task(Sub() ReceiveData())
            receiveTask.Start()

            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
            btnSend.Enabled = True
            txtUsername.ReadOnly = True
            txtServer.ReadOnly = True
            txtPort.ReadOnly = True

            isConnected = True
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Connection error")
        End Try
    End Sub

    Private Sub btnDisconnect_Click(sender As Object, e As EventArgs) Handles btnDisconnect.Click
        ' Sunucuya bağlantıyı kapatma isteği gönderin
        Dim message As Byte() = System.Text.Encoding.ASCII.GetBytes("/exit")
        stream.Write(message, 0, message.Length)

        isConnected = False
        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
        btnSend.Enabled = False
        txtUsername.ReadOnly = False
        txtServer.ReadOnly = False
        txtPort.ReadOnly = False
        stream.Close()
        tcp
End Sub

Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
    ' Mesajı gönderin
    Dim message As Byte() = System.Text.Encoding.ASCII.GetBytes(txtMessage.Text)
    stream.Write(message, 0, message.Length)
    txtMessage.Text = ""
End Sub

Private Sub ReceiveData()
    While isConnected
        If tcpClient.Available > 0 Then
            ' Gelen veriyi okuyun
            Dim data(tcpClient.Available - 1) As Byte
            stream.Read(data, 0, data.Length)
            Dim message As String = System.Text.Encoding.ASCII.GetString(data)

            ' Ekrana yazdırın
            Me.Invoke(Sub() DisplayMessage(message))
        End If
        Threading.Thread.Sleep(100)
    End While
End Sub

Private Sub DisplayMessage(ByVal message As String)
    rtbMessages.AppendText(message & vbCrLf)
End Sub
End Class
vbnet
Sunucu tarafı için aşağıdaki adımları izleyebilirsiniz:
1. Yeni bir Windows Form uygulaması oluşturun ve form üzerinde bir `TextBox` (port numarası), bir `Button` (başlatma/kapatma düğmesi) ve bir `RichTextBox` (mesajları göstermek için) ekleyin.

2. `Imports System.Net.Sockets` satırı ile `System.Net.Sockets` ad alanını ekleyin.

3. Sunucu tarafında bir `TcpListener` nesnesi oluşturun ve belirtilen port numarasını dinlemeye başlayın.

4. İstemci bağlantıları kabul edildiğinde, `TcpClient` nesneleri oluşturun ve bunları bir `List` nesnesinde saklayın.

5. Mesajları okumak için, bağlı tüm istemci bağlantıları üzerinden döngü oluşturun. Her istemcinin `NetworkStream` nesnesini kullanarak gelen mesajları okuyun ve diğer tüm istemcilere gönderin.

6. Sunucu kapatma isteği aldığında, tüm istemci bağlantılarını kapatın ve sunucuyu kapatın.

İşte örnek bir Visual Basic sunucu kodu:

```vb.net
Imports System.Net.Sockets

Public Class Form1
    Private tcpListener As TcpListener
    Private clients As New List(Of TcpClient)
    Private isRunning As Boolean

    Private Sub btnStartStop_Click(sender As Object, e As EventArgs) Handles btnStartStop.Click
        If isRunning Then
            ' Sunucuyu kapatın
            For Each client In clients
                client.Close()
            Next
            tcpListener.Stop()

            btnStartStop.Text = "Başlat"
            txtPort.ReadOnly = False
            isRunning = False
        Else
            Try
                ' Sunucuyu başlatın
                tcpListener = New TcpListener(System.Net.IPAddress.Any, CInt(txtPort.Text))
                tcpListener.Start()

                ' Bağlantıları kabul etmek için bir arka plan görevi başlatın
                Dim acceptTask As New Task(Sub() AcceptClients())
                acceptTask.Start()

                btnStartStop.Text = "Durdur"
                txtPort.ReadOnly = True
                isRunning = True
            Catch
            MessageBox.Show("Bağlantı hatası")
        End Try
    End If
End Sub

Private Sub AcceptClients()
    While isRunning
        If tcpListener.Pending Then
            ' Yeni bir istemci bağlantısı kabul edin
            Dim client = tcpListener.AcceptTcpClient()

            ' İstemciyi listeye ekleyin
            clients.Add(client)

            ' İstemci bağlantısı için yeni bir arka plan görevi başlatın
            Dim clientTask As New Task(Sub() HandleClient(client))
            clientTask.Start()
        End If
        Threading.Thread.Sleep(100)
    End While
End Sub

Private Sub HandleClient(ByVal client As TcpClient)
    Dim stream As NetworkStream = client.GetStream()

    While isRunning
        If client.Connected AndAlso stream.DataAvailable Then
            ' Gelen mesajı okuyun
            Dim data(client.Available - 1) As Byte
            stream.Read(data, 0, data.Length)
            Dim message As String = System.Text.Encoding.ASCII.GetString(data)

            ' Mesajı diğer istemcilere gönderin
            For Each otherClient In clients
                If otherClient IsNot client Then
                    Dim otherStream As NetworkStream = otherClient.GetStream()
                    otherStream.Write(data, 0, data.Length)
                End If
            Next

            ' Mesajı kendi sunucu formunuzda da gösterin
            Me.Invoke(Sub() DisplayMessage(message))
        End If
        Threading.Thread.Sleep(100)
    End While

    ' İstemci bağlantısını kapatın
    clients.Remove(client)
    client.Close()
End Sub

Private Sub DisplayMessage(ByVal message As String)
    rtbMessages.AppendText(message & vbCrLf)
End Sub
Bu kod, belirtilen port numarasında bir TCP sunucusu oluşturacak ve gelen bağlantıları kabul edecektir. İstemciler, önceki örnekteki gibi bir kullanıcı arayüzü ve bir “Bağlan” düğmesi kullanarak sunucuya bağlanabilirler.
Sunucu, bağlı tüm istemcilere gelen mesajları iletmek için bir döngü içinde çalışır. İstemciler tarafından gönderilen mesajlar diğer istemcilere gönderilir ve sunucu formunda görüntülenir. Ayrıca, istemcilerin bağlantılarını kapatması durumunda sunucu bağlantısını kapatır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir