Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem z chatem


Rekomendowane odpowiedzi

Opublikowano

Witam mam mały problem z chatem 

oto kod servera:

okno główne:

Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Public Class Form1
    Private sr As StreamReader
    Public sw As StreamWriter
    Private Server As TCPControl

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Server.IsListening = False

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        If System.IO.File.Exists("options.txt") = False Then
            write()
        End If

        sr = New StreamReader("options.txt")
        Dim ip As String = sr.ReadLine
        Dim port As String = sr.ReadLine
        sr.Close()

        Button2.Enabled = False

        Server = New TCPControl
        Server.ls()

        txtChat.Text = ":: Serwer Wystartował z ip: " & ip & " Na Porcie: " & port & " ::" & vbCrLf
        AddHandler Server.MessageReceived, AddressOf OnLineReceived

    End Sub

    Private Delegate Sub UpdateTextDelegate(TB As TextBox, txt As String)

    ' UPDATE TEXTBOX '
    Private Sub UpdateText(TB As TextBox, txt As String)
        If TB.InvokeRequired Then
            TB.Invoke(New UpdateTextDelegate(AddressOf UpdateText), New Object() {TB, txt})
        Else
            If txt IsNot Nothing Then TB.AppendText(txt & vbCrLf)

        End If
    End Sub
    Private Sub OnLineReceived(sender As TCPControl, Data As String)
        UpdateText(txtChat, Data)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.Show()

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Server.Server.Stop()
        Server.Server.Start()
        sr = New StreamReader("options.txt")
        Dim ip As String = sr.ReadLine
        Dim port As String = sr.ReadLine
        sr.Close()
        Server = New TCPControl


        txtChat.Text = ":: Serwer Wystartował z ip: " & ip & " Na Porcie: " & port & " ::" & vbCrLf
    End Sub
    Public Sub write()
        sw = New StreamWriter("options.txt")
        sw.WriteLine("192.168.0.102")
        sw.WriteLine(55534)
        sw.Close()
        Me.Close()
    End Sub
End Class

plik TCPControl.vb: tu mam taki problem że chciałbym żeby ustawienia servera były wyczytywane z pliku lecz wyskakuje mi błąd przy połączeniu tak jakby server się nie włączał

Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

Public Class TCPControl
    Dim sr As StreamReader
    Dim port As String
    Dim ip As String

    Public Sub ls()
        sr = New StreamReader("options.txt")
        ip = sr.ReadLine
        port = sr.ReadLine

        MsgBox(ip & ":" & port)
    End Sub

    



    Public Event MessageReceived(sender As TCPControl, Data As String)






    ' SERVER CONFIG '
    Public ServerIP As IPAddress = IPAddress.Parse(ip)
    Public ServerPort As Integer = port
    Public Server As TcpListener
    ' END SERVER CONFIG '

    Private CommThread As Thread
    Public IsListening As Boolean = True

    ' CLIENTS '
    Private Client As TcpClient
    Private ClientData As StreamReader

    Public Sub New()
        Server = New TcpListener(ServerIP, ServerPort)
        Server.Start()

        CommThread = New Thread(New ThreadStart(AddressOf listening))
        CommThread.Start()
    End Sub

    Private Sub listening()
        'CREATE LISTENER LOOP'
        Do Until IsListening = False
            ' ACCEPT INCOMING CONNECTIONS '
            If Server.Pending = True Then
                Client = Server.AcceptTcpClient
                ClientData = New StreamReader(Client.GetStream)


            End If

            ' RAISE EVENT FOR INCOMING MESSAGES '
            Try
                RaiseEvent MessageReceived(Me, ClientData.ReadLine)
            Catch ex As Exception

            End Try

            ' REDUCE CPU USAGE '
            Thread.Sleep(100)
        Loop
    End Sub

End Class

Client: w cliencie chciałbym dodać text boxa z historią czatu ale nie wiem jak zrobić żeby wiadomości innych też były na nim wpisane

okno główne:

Public Class Form1
    Private Client As TCPControl

    Private Sub cmdConnect_Click(sender As Object, e As EventArgs) Handles cmdConnect.Click
        Client = New TCPControl(IP.Text, Port.Text)
        If Client.Client.Connected Then
            stat.Text = "Połączono!"
            cmdConnect.Enabled = False
            cmdDisConnect.Enabled = True
          

        End If

    End Sub

    Private Sub cmdDisConnect_Click(sender As Object, e As EventArgs) Handles cmdDisConnect.Click
        stat.Text = "Rozłączono"
        cmdDisConnect.Enabled = False
        cmdConnect.Enabled = True
        Client.DataStream.Close()
        Client.Client.Close()
    End Sub


    Private Sub cmdSend_Click(sender As Object, e As EventArgs) Handles cmdSend.Click
        SendMessage()
        txtMessage.Clear()
        txtMessage.Focus()

    End Sub

    Private Sub SendMessage()
        If Client.Client.Connected = True Then Client.Send(Format(Now, "[dd.MM | hh:mm:ss] ") & nick.Text & ": " & txtMessage.Text & vbCrLf)
    End Sub

    Private Sub txtMessage_KeyDown(sender As Object, e As KeyEventArgs) Handles txtMessage.KeyDown
        If e.KeyCode = Keys.Enter Then
            SendMessage()
            txtMessage.Clear()
            txtMessage.Focus()
        End If

    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Client = New TCPControl(IP.Text, Port.Text)
        If Client.Client.Connected = True Then
            Client.DataStream.Close()
            Client.Client.Close()

        End If
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        cmdDisConnect.Enabled = False
    End Sub
    
End Class

plik TCPControl.vb:

Imports System.Net
Imports System.Net.Sockets
Imports System.IO

Public Class TCPControl
    Public Client As TcpClient
    Public DataStream As StreamWriter


    Public Sub New(Host As String, Port As Integer)
        ' CLIENT '
        Client = New TcpClient(Host, Port)
        DataStream = New StreamWriter(Client.GetStream)
    End Sub

    Public Sub Send(Data As String)
        DataStream.Write(Data & vbCrLf)
        DataStream.Flush()
    End Sub
End Class

proszę o odpowiedzi i poprawiony kod a przynajmiej jakieś wskazówki

Opublikowano

Zrobiłeś niezłe zamieszanie. Zamiast zwykłego pliku .txt polecam użyć .cfg albo html bo nie rozumiem tego wszego sr.ReadLine.

Jeśli chcesz historię to niech klient wysyła treść swojego textboxa do odbiornika za każdym razem jak tekst się zmieni. 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...