VB.Net Tutorial/Socket Network/TcpListener

Материал из VB Эксперт
Перейти к: навигация, поиск

Date time server based on TcpListener

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
DateTime Server started at: 192.168.1.101:13
^CTerminate batch job (Y/N)? n

Use TcpListener

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