Jump to content
Xtreme .Net Talk
  • TCP Communication Using StreamSocket

       (0 reviews)

    A simplified version of the MSDN StreamSocket sample (tested and working).

     

    TCP Client (Windows Phone 8 App)

    Imports Windows.Networking
    Imports Windows.Networking.Sockets
    Imports Windows.Storage.Streams
    
    Partial Public Class MainPage : Inherits PhoneApplicationPage
    
       Dim Socket As StreamSocket
    
       Private Async Sub ButtonConnect_Click(sender As Object, e As RoutedEventArgs) Handles ButtonConnect.Click
           Socket = New StreamSocket
           Await Socket.ConnectAsync(New HostName("192.168.1.7"), "1234")
           StartListening()
       End Sub
    
       Private Async Sub StartListening()
           Dim reader As New DataReader(Socket.InputStream)
           Do
               ' Read first 4 bytes (length of the subsequent string).
               Dim sizeFieldCount As UInteger = Await reader.LoadAsync(CUInt(Runtime.InteropServices.Marshal.SizeOf(New UInteger)))
               If sizeFieldCount <> Runtime.InteropServices.Marshal.SizeOf(New UInteger) Then
                   ' The underlying socket was closed before we were able to read the whole data.
                   Return
               End If
    
               ' Read the string.
               Dim stringLength As UInteger = reader.ReadUInt32()
               Dim actualStringLength As UInteger = Await reader.LoadAsync(stringLength)
               If stringLength <> actualStringLength Then
                   ' The underlying socket was closed before we were able to read the whole data.
                   Return
               End If
    
               ' Display the string.
               Dim MsgReceived As String = reader.ReadString(actualStringLength)
               System.Diagnostics.Debug.WriteLine(MsgReceived)
           Loop
       End Sub
    
       Private Async Sub ButtonSend_Click(sender As Object, e As RoutedEventArgs) Handles ButtonSend.Click
           Dim stringToSend As String = "Some Text To Send"
           Dim writer As New DataWriter(Socket.OutputStream)
           writer.WriteUInt32(writer.MeasureString(stringToSend))
           writer.WriteString(stringToSend)
           Await writer.StoreAsync()
           writer.DetachStream()
           writer.Dispose()
       End Sub
    
    End Class

     

    TCP Server (Windows 8 Store App)

    Imports Windows.Networking
    Imports Windows.Networking.Sockets
    Imports Windows.Storage.Streams
    
    Public NotInheritable Class MainPage : Inherits Page
    
       Dim WithEvents ListenerSocket As StreamSocketListener
    
       Private Async Sub ButtonListen_Click(sender As Object, e As RoutedEventArgs) Handles ButtonListen.Click
           ListenerSocket = New StreamSocketListener
           ' Don't limit traffic to an address or an adapter.
           Await ListenerSocket.BindServiceNameAsync("1234")
       End Sub
    
       Dim Socket As StreamSocket
    
       Private Async Sub listener_ConnectionReceived(sender As StreamSocketListener, args As StreamSocketListenerConnectionReceivedEventArgs) Handles ListenerSocket.ConnectionReceived
           ' Invoked once a connection is established.
           Debug.WriteLine("Connection Established")
           Socket = args.Socket
           Dim reader As New DataReader(args.Socket.InputStream)
           Do
               ' Read first 4 bytes (length of the subsequent string).
               Dim sizeFieldCount As UInteger = Await reader.LoadAsync(CUInt(Runtime.InteropServices.Marshal.SizeOf(New UInteger)))
               If sizeFieldCount <> Runtime.InteropServices.Marshal.SizeOf(New UInteger) Then
                   Return ' The underlying socket was closed before we were able to read the whole data.
               End If
    
               ' Read the string.
               Dim stringLength As UInteger = reader.ReadUInt32()
               Dim actualStringLength As UInteger = Await reader.LoadAsync(stringLength)
               If stringLength <> actualStringLength Then
                   Return ' The underlying socket was closed before we were able to read the whole data.
               End If
    
               ' Display the string.
               Dim MsgReceived As String = reader.ReadString(actualStringLength)
               Debug.WriteLine(MsgReceived)
           Loop
       End Sub
    
       Private Async Sub ButtonSend_Click(sender As Object, e As RoutedEventArgs) Handles ButtonSend.Click
           Dim stringToSend As String = "Some Text Back"
           Dim writer As New DataWriter(Socket.OutputStream)
           writer.WriteUInt32(writer.MeasureString(stringToSend))
           writer.WriteString(stringToSend)
           Await writer.StoreAsync()
           writer.DetachStream()
           writer.Dispose()
       End Sub
    
    End Class

     

    PS: Requesting to be moved to code library, please.


    User Feedback

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest

×
×
  • Create New...