VB.Net Tutorial/Socket Network/TcpListener

Материал из VB Эксперт
Версия от 15:55, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Date time server based on TcpListener

<source lang="vbnet">Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class DateTimeServer

 Public Shared Sub Main()
   Try
     Dim hostname As String = Dns.GetHostName()
     Dim serverIP As IPAddress = Dns.Resolve(hostname).AddressList(0)
     Dim Port As String = "13"
     Dim tcpListener As New TcpListener(serverIP, Int32.Parse(Port))
     tcpListener.Start()
     Console.WriteLine("DateTime Server started at: " + serverIP.ToString() + ":" + Port)
     Dim lc As New ListenClient(tcpListener)
     Dim serverthread As New Thread( _
         New ThreadStart(AddressOf lc.ServerThreadProc))
     serverthread.Start()
   Catch ex As Exception
     Console.WriteLine(ex.StackTrace.ToString())
   End Try
 End Sub

End Class

Public Class ListenClient

 Private tcpListener As System.Net.Sockets.TcpListener
 Private clientSocket As System.Net.Sockets.Socket
 Public Sub New(ByVal tcpListener As tcpListener)
   Me.tcpListener = tcpListener
 End Sub
 Public Sub ServerThreadProc()
   Try
     While (True)
       clientSocket = tcpListener.AcceptSocket()
       Dim clientInfo As IPEndPoint = CType(clientSocket.RemoteEndPoint,IPEndPoint)
       Dim serverInfo As IPEndPoint = CType(tcpListener.LocalEndpoint,IPEndPoint)
       Console.WriteLine("Client: " + clientInfo.Address.ToString() + ":" + clientInfo.Port.ToString())
       Console.WriteLine("Server: " + serverInfo.Address.ToString() + ":" + serverInfo.Port.ToString())
       Dim strDate As String = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString()
       Dim byteDateLine() As Byte = Encoding.ASCII.GetBytes(strDate.ToCharArray())
       clientSocket.Send(byteDateLine, byteDateLine.Length, SocketFlags.None)
       Console.WriteLine("To Client: " + clientInfo.Address.ToString() + ":" + clientInfo.Port.ToString() + ": " + strDate)
       clientSocket.Shutdown(SocketShutdown.Both)
       clientSocket.Close()
     End While
   Catch ex As Exception
     Console.WriteLine(ex.StackTrace.ToString())
     If clientSocket.Connected Then
       clientSocket.Close()
     End If
   End Try
 End Sub

End Class</source>

DateTime Server started at: 192.168.1.101:13
^CTerminate batch job (Y/N)? n

Use TcpListener

<source lang="vbnet">Imports System.Net.Sockets Imports System.Net Imports System.Threading Imports System.Text Public Class Tester

   Dim Shared myTcpListener As TcpListener
   
   Public Shared Sub Main
       Dim myThread As New Thread(New ThreadStart(AddressOf StartListen))
       myThread.Start()
   End Sub
   Private Shared Sub StartListen()
       myTcpListener = New TcpListener(12334)
       Dim blnConection As Boolean = False
       Try
           myTcpListener.Start()
           Dim mySocket As Socket = myTcpListener.AcceptSocket()
           Do
               If mySocket.Connected = True Then blnConection = True
           Loop Until blnConection = True
           myTcpListener.Stop()
       Catch ex As SocketException
           Console.WriteLine(ex.Message)
       End Try
   End Sub

End Class</source>