How to: Create a Socket Listener

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

The .NET Compact Framework supports socket-based network communications. For considerations that are specific to programming sockets in the .NET Compact Framework, see Socket Programming.

This example creates an instance of a server application and an instance of a client application, and demonstrates how the two applications communicate over a socket-based connection. The localhost address is used for the server; therefore, both applications run on the client. An instance of the server must be running before the client can communicate with it.

To communicate over a socket connection

  1. Create a class named Server that implements Form, and add the following code to the class:

    Private Shared output As String = ""
    Public Sub New() 
    End Sub
    Public Sub createListener() 
        ' Create an instance of the TcpListener class.
        Dim tcpListener As TcpListener = Nothing
        Dim ipAddress As IPAddress = Dns.GetHostEntry("localhost").AddressList(0)
            ' Set the listener on the local IP address.
            ' and specify the port.
            tcpListener = New TcpListener(ipAddress, 13)
            output = "Waiting for a connection..."
        Catch e As Exception
            output = "Error: " + e.ToString()
        End Try
        While True
            ' Always use a Sleep call in a while(true) loop
            ' to avoid locking up your CPU.
            ' Create a TCP socket.
            ' If you ran this server on the desktop, you could use
            ' Socket socket = tcpListener.AcceptSocket()
            ' for greater flexibility.
            Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
            ' Read the data stream from the client.
            Dim bytes(255) As Byte
            Dim stream As NetworkStream = tcpClient.GetStream()
            stream.Read(bytes, 0, bytes.Length)
            Dim helper As New SocketHelper()
            helper.processMsg(tcpClient, stream, bytes)
        End While
    End Sub
    Shared Sub Main() 
        Application.Run(New Server())
    End Sub
  2. In the Server class, provide a way to start the server. For example, call createListener in a button's Click event.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub
  3. Create a class named SocketHelper, and add the following code to the class:

    Class SocketHelper
        Private mscClient As TcpClient
        Private mstrMessage As String
        Private mstrResponse As String
        Private bytesSent() As Byte
        Public Sub processMsg(ByVal client As TcpClient, ByVal stream As NetworkStream, ByVal bytesReceived() As Byte)
            ' Handle the message received and 
            ' send a response back to the client.
            mstrMessage = Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length)
            mscClient = client
            mstrMessage = mstrMessage.Substring(0, 5)
            If mstrMessage.Equals("Hello") Then
                mstrResponse = "Goodbye"
                mstrResponse = "What?"
            End If
            bytesSent = Encoding.ASCII.GetBytes(mstrResponse)
            stream.Write(bytesSent, 0, bytesSent.Length)
        End Sub
    End Class

    The server instantiates this class when a client connects to it.

  4. Create a class named Client that implements Form, and add the following code to the class:

        Shared Sub Connect(ByVal serverIP As String, ByVal message As String) 
    	Dim output As String = ""
                ' Create a TcpClient.
                ' The client requires a TcpServer that is connected
                ' to the same address specified by the server and port
                ' combination.
                Dim port As Int32 = 13
                Dim client As New TcpClient(serverIP, port)
                ' Translate the passed message into ASCII and store it as a byte array.
                Dim data(255) As [Byte]
                data = System.Text.Encoding.ASCII.GetBytes(message)
                ' Get a client stream for reading and writing.
                ' Stream stream = client.GetStream();
                Dim stream As NetworkStream = client.GetStream()
                ' Send the message to the connected TcpServer. 
                stream.Write(data, 0, data.Length)
                output = "Sent: " + message
                ' Buffer to store the response bytes.
                data = New [Byte](255) {}
                ' String to store the response ASCII representation.
                Dim responseData As String = String.Empty
                ' Read the first batch of the TcpServer response bytes.
                Dim bytes As Int32 = stream.Read(data, 0, data.Length)
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
                output = "Received: " + responseData
                ' Close everything.
            Catch e As ArgumentNullException
                output = "ArgumentNullException: " + e.ToString()
            Catch e As SocketException
                output = "SocketException: " + e.ToString()
            End Try
        End Sub
        Shared Sub Main() 
            Application.Run(New Client())
        End Sub
  5. In the Client class, provide a way for the user to connect to the server. For example, call the Connect method in a button's Click event.

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) 
        ' In this code example, use a hard-coded
        ' IP address and message.
        Dim serverIP As String = "localhost"
        Dim message As String = "Hello"
        Connect(serverIP, message)
    End Sub
  6. Compile the server and client applications.

  7. Deploy both applications to the device.

  8. Run the server application on the device, and start the server.

  9. Run the client application on the device, and connect to the server.