Resorces used: http://www.developer...gates-in-vbnet/
Pastebin:
http://pastebin.com/vj1S36f1
Imports System.Net.Sockets
Imports System.Net
Imports System.Xml
Imports System.IO
Public Class frmMain
Const Title As String = "Test Network XML"
Dim Myport As Integer = 20000
Dim count As Integer = 1
Dim TCPclient As New TcpClient
Dim TCPListener As TcpListener
Dim IP As IPAddress
Public Alive As Boolean = True
Private Delegate Sub DS(ByVal Name As String, ByVal Test As String)
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
setUp()
TitleUpdate(count)
Dim Server As New Threading.Thread(AddressOf ServerLoop)
Server.Start()
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Alive = False
End Sub
''' <summary>
''' Creates a new port number by randow value between 20,000 and 30,000. creates the local listener
''' </summary>
''' <remarks>For use when form starts up</remarks>
Private Sub setUp()
Dim gen As New Random
Myport = gen.Next(20000, 30000)
tbxMyPort.Text = Myport
IP = IPAddress.Parse(tbxHostIP.Text)
TCPListener = New TcpListener(IP, Myport)
TCPListener.Start(8)
End Sub
''' <summary>
''' Creetes a new thread to handle another window
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
count = count + 1
Dim T As New System.Threading.Thread(AddressOf Newform)
T.Start(count)
End Sub
''' <summary>
''' Creates a new window and performs a loop as long as the window is "alive"
''' </summary>
''' <param name="xCount">The current number of windows created</param>
''' <remarks>For use by a new thread</remarks>
Private Sub Newform(ByVal xCount As Integer)
Dim frmNew As New frmMain
frmNew.Show()
frmNew.TitleUpdate(xCount)
While frmNew.Alive
Application.DoEvents()
End While
End Sub
''' <summary>
''' Updates the title in the form's window
''' </summary>
''' <param name="xcount">The current number of windows created</param>
''' <remarks></remarks>
Public Sub TitleUpdate(ByVal xcount As Integer)
count = xcount
Me.Text = Title & " - " & count
End Sub
''' <summary>
''' Loops while form is "Alive". Accepts incoming sockets and has the dataset dsNetwork read stream. Then reads last row sent and displays it to tbxDisplay with a delegate.
''' </summary>
''' <remarks></remarks>
Private Sub ServerLoop()
While Me.Alive
Try
Dim tcpclient As New TcpClient
tcpclient = TCPListener.AcceptTcpClient()
Dim netstream As NetworkStream = tcpclient.GetStream()
dsNetwork.ReadXml(netstream)
netstream.Close()
tcpclient.Close()
Catch ex As Exception
MessageBox.Show(ex.Message.ToString & vbCrLf & ex.InnerException.ToString, "Error")
End Try
Dim name As String
Dim text As String
Dim cRows As Integer = dsNetwork.Tables("Network").Rows.Count - 1
name = dsNetwork.Tables("Network").Rows(cRows).Item("Name")
text = dsNetwork.Tables("Network").Rows(cRows).Item("Text")
Dim del As DS
del = New DS(AddressOf DelText)
del.Invoke(name, text)
End While
End Sub
''' <summary>
''' Delegate sub. Perpose format and display passed values
''' </summary>
''' <param name="Name"></param>
''' <param name="Text"></param>
''' <remarks>To be called by delegate only</remarks>
Private Sub DelText(ByVal Name As String, ByVal Text As String)
tbxDisplay.Text = String.Format("Name: {0}" & vbCrLf & "Text: {1}", Name, Text) 'is not thread safe
End Sub
''' <summary>
''' Reads info from both name and text Textboxs and puts them into a dataset dsNetwork. Sends the data over TCP socket using xml.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Dim Row As DataRow = dsNetwork.Tables("Network").NewRow()
Row("Name") = tbxName
Row("Text") = tbxText
dsNetwork.Tables("Network").Rows.Add(Row)
Try
TCPclient.Connect(IP, CInt(tbxPort.Text))
Dim netstream As NetworkStream = TCPclient.GetStream()
dsNetwork.WriteXml(netstream)
dsNetwork.Tables("Network").Clear()
netstream.Flush()
netstream.Close()
Catch ex As Exception
MessageBox.Show(ex.Message.ToString & vbCrLf & ex.InnerException.ToString, "Error")
Finally
TCPclient.Close()
End Try
End Sub
End Class

New Topic/Question
Reply



MultiQuote






|