Hi everyone, i am trying to make a chat program. In the process i found alot of errors in my code already but now i seem stuck with getting all connected computers their ip adresses (only those who have the program open is okay as well) but i can't seem to find any of the 2.
All the code i have is a login and a chat module: (Ps: the login works)
The problem is as explained earlier that it only works local because i can't seem to find the code to find other people who are connecter and/or having my program open, their ip address.
Login:
Chat:
All the code i have is a login and a chat module: (Ps: the login works)
The problem is as explained earlier that it only works local because i can't seem to find the code to find other people who are connecter and/or having my program open, their ip address.
Login:
Code:
'Login module
Imports System.Text
Imports System.Windows.Forms
Imports System.Net.Sockets
Public Class Login
Public user As String
Dim oChat As New DerdeTest.Chat
Private Sub Login_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'Hier gebeurt wat je doet als je de login laadt
End Sub
Public Sub New()
' This call is required by the designer.
InitializeComponent()
AddHandler ButtonKies.Click, AddressOf ButtonKies_Click
AddHandler Me.FormClosing, AddressOf Login_Closing
End Sub
Public Sub ButtonKies_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
user = TbUsername.Text
If TbUsername.Text = "" Then
MessageBox.Show("Vul alle velden correct in. Een gebruikersnaam tussen de 1-25 letters.")
Exit Sub
End If
RemoveHandler Me.FormClosing, AddressOf Login_Closing
Me.Dispose(False)
oChat.Show()
End Sub
Public Sub Login_Closing(ByVal sender As System.Object, ByVal e As System.EventArgs)
user = ""
End Sub
End ClassCode:
' Alle bibliotheken
Option Explicit On
Imports System.IO
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports DerdeTest.Login
Public Class Chat
Dim HOST As String = System.Net.Dns.GetHostName() 'Verkrijg het Hostadres
Dim IP As IPAddress() = System.Net.Dns.GetHostEntry(HOST).AddressList 'Verkrijg met behulp van het hostadres je iplijst
Dim PORT As Int32 = 65400 ' Dim de poort op nummer
Dim Client As New TcpClient 'Dim je client als tcp (waarom kan ik niet uitleggen)
Dim Message As String = "" 'Dim je bericht als string
Dim Listener As New TcpListener(PORT) 'Dim je listener en bind hem aan onze poort
Dim strHostName As String = "localhost"
Dim strIPAddress As String = ""
Dim objAddressList() As System.Net.IPAddress = _
System.Net.Dns.GetHostEntry(strHostName).AddressList
Public Sub New()
' This call is required by the designer. 'stond er zowiso als ik een handler toevoegde.
InitializeComponent()
AddHandler ButtonZend.Click, AddressOf ButtonZend_Click
AddHandler Me.Load, AddressOf Chat_Load
AddHandler Me.FormClosing, AddressOf Chat_Leave
AddHandler Timer1.Tick, AddressOf Timer_Tick
' 4 handlers zodat we geen problemen krijgen met deze en geen lange regels achter de private sub.
End Sub
Private Sub Chat_Load(ByVal sender As Object, ByVal e As System.EventArgs) 'Hier gebeurt wat je doet als je de chatbox laadt (na de login)
rtb1.Text = (Login.user & " welkom in onze chatbox. ^^ ") ' Zet naam + wekomsbericht in rich text box
Timer1.Start() 'Start de Timer
Listener.Start() 'Start Listener
Dim l As Integer
For l = IP.Count - 1 To 0 Step -1
If IP(l).ToString.Contains(":") = True Then
Dim IP2 = (IP.ToList)
IP2.Remove(IP(l))
IP = IP2.ToArray
End If
Next
For i As Integer = 0 To IP.Length - 1
rtb1.Text += vbNewLine + IP(i).ToString
Next
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Wat gebeurt als timer tikt
If Listener.Pending = True Then 'Listener.Pending = True maar verkort, dus dat de listener moet luisteren.
Message = "" 'Zorgen dat het bericht leeg is
Client = Listener.AcceptTcpClient() 'Zeg dat je client de listener accepteerd
Dim Reader As New StreamReader(Client.GetStream()) 'Reader dimmen
While Reader.Peek() > -1 'Zolang reader geen -1 is,
Message &= Convert.ToChar(Reader.Read()).ToString ' zet het berciht om in karakters en lees het.
End While
'De uitleg hieronder was er en is er voor herinnering
'Here you can enter anything you would like
'to happen when a message is received,
'For instance; Play a sound, Show a message Box, A Balloon Tip etc.
rtb1.Text = Message
End If
End Sub
Private Sub ButtonZend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Wat te doen als je zend
Try
Dim l As Integer
For l = IP.Count - 1 To 0 Step -1
If IP(l).ToString.Contains(":") = True Then
Dim IP2 = (IP.ToList)
IP2.Remove(IP(l))
IP = IP2.ToArray
End If
Next
For i As Integer = 0 To IP.Length - 1
Client = New TcpClient(IP(i).ToString, PORT)
'zeg dat client gebonden is aan poort & ip jezelf
Next
Dim Writer As New StreamWriter(Client.GetStream()) 'Writer = dat het alles schrijft. Flush doet alles dat erin zit er geforceerd uit naar textbox.
Writer.Write(rtb1.Text & vbNewLine & Login.user & " zegt: " & tbZend.Text)
Writer.Flush()
tbZend.Text = ""
'Write the Message in the stream
Catch
End Try 'Stop doen.
End Sub
Private Sub Chat_Leave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
rtb1.Text = rtb1.Text & (Login.user & " heb nog een fijne dag. :3" & vbNewLine & "Byebye.") 'Bericht voor als je weggaat maar je ziet dit niet met dat het te snel gebeurt, ik laat het hier staan om later ergens anders te zetten.
Listener.Stop() 'Stop listener
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("DerdeTest")
For Each p As Process In pProcess
p.Kill()
Next
End Sub
End Class