Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement