共用方式為


Packet 類別

更新:2007 年 11 月

保存資料,並供 DevicePacketStream 類別 (Class) 用來在智慧型裝置和桌上型電腦之間傳送資料。

命名空間:  Microsoft.SmartDevice.Connectivity
組件:  Microsoft.SmartDevice.Connectivity (在 Microsoft.SmartDevice.Connectivity.dll 中)

語法

Public Class Packet

Dim instance As Packet
public class Packet
public ref class Packet
public class Packet

備註

Packet 類別只能保存型別 byte、byte[]、string、int 和 char 的物件。Packet 類別無法擴充以讀取和寫入自訂物件。但是,使用者還是可以將自訂資料型別分割成基本資料型別,或將自訂資料型別序列化成位元組陣列,在資料流上傳輸自訂物件。

範例

Imports System
Imports System.Collections.ObjectModel
Imports Microsoft.SmartDevice.Connectivity



Class [source]

    Shared Sub Main(ByVal args() As String) 
        ' Get the datastore object
        Dim dsmgr As New DatastoreManager(1033)

        ' Get the platform object
        Dim platform As Platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr)

        ' Get the default device in the platform, usually an emulator.
        Dim device As Device = platform.GetDevice(platform.GetDefaultDeviceId())

        device.Connect()

        If device.IsConnected() Then
            ' Copy and start a device agent based on the ID of its add-on package.
            Dim ra As RemoteAgent = device.GetRemoteAgent( _
                New ObjectId("CAF078AE-2E10-43e2-B566-C4577F2538C7"))
            ra.Start("command line argument")
            ' Open communication channel with device agent.
            Dim ps As DevicePacketStream = ra.CreatePacketStream( _
                New ObjectId("2FAD740C-B5D3-4ad0-BE23-5682503584BF"))

            ' Create and write a packet of data.
            Dim packet As Packet
            packet = New Packet()
            Dim i As Integer
            For i = 0 To 3
                packet.WriteInt32(i)
            Next i
            packet.WriteString("Hello Smart Device")
            ps.Write(packet)
            ' While stream is connected, try to read a packet.
            While ps.IsConnected()
                If ps.IsPacketAvailable() Then
                    packet = ps.Read()
                    While Not packet.IsEndOfPacket()
                        Select Case packet.ReadDataType()
                            Case DataType.BoolType
                                Dim boolValue As Boolean = packet.ReadBool()
                            Case DataType.ByteArrayType
                                Dim buffer As Byte() = packet.ReadBytes()
                            Case DataType.ByteType
                                Dim byteValue As Byte = packet.ReadByte()
                            Case DataType.CharType
                                Dim charValue As Char = packet.ReadChar()
                            Case DataType.Int32Type
                                Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString())
                            Case DataType.StringType
                                Console.WriteLine("String:  " + packet.ReadString())
                            Case Else
                        End Select
                    End While
                    Exit While
                End If
                System.Threading.Thread.Sleep(1000)
            End While
            ps.Close()
            device.Disconnect()
            Console.ReadLine()
        End If

    End Sub 'Main

    ' Returns a platform if the supplied name can be found in the datastore.
    ' Returns null pointer if platform cannot be found
    Private Shared Function GetPlatformByName(ByVal p As String, _
                                              ByVal dsmgr As DatastoreManager) As Platform
        ' Get all platforms in the datastore.
        Dim platforms As Collection(Of Platform) = dsmgr.GetPlatforms()

        ' Find the platform whose name matches the parameter.
        Dim platform As Platform
        For Each platform In platforms
            If platform.Name = p Then
                Return platform
            End If
        Next platform
        Return Nothing

    End Function 'GetPlatformByName
End Class '[source]
using System;
using System.Collections.ObjectModel;
using Microsoft.SmartDevice.Connectivity;

class source
{
    static void Main(string[] args)
    {
         // Get the datastore object
        DatastoreManager dsmgr = new DatastoreManager(1033);

        // Get the platform object
        Platform platform = GetPlatformByName("Windows Mobile 5.0 Smartphone SDK", dsmgr);

        // Get the default device in the platform, usually an emulator.
        Device device = platform.GetDevice(platform.GetDefaultDeviceId());

        device.Connect();

        if (device.IsConnected())
        {
            // Copy and start a device agent  based on the ID of its add-on package.
            RemoteAgent ra = device.GetRemoteAgent(
                new ObjectId("CAF078AE-2E10-43e2-B566-C4577F2538C8"));
            ra.Start("command line argument");

            // Open communication channel with device agent.
            DevicePacketStream ps = ra.CreatePacketStream(
                new ObjectId("2FAD740C-B5D3-4ad0-BE23-5682503584BF"));

            // Create and write a packet of data.
            Packet packet;
            packet = new Packet();
            for (int i = 0; i < 4; i ++) packet.WriteInt32(i);
            packet.WriteString("Hello Smart Device");
            ps.Write(packet);

            // While stream is connected, try to read a packet.
            while (ps.IsConnected())
            {
                if (ps.IsPacketAvailable())
                {
                    packet = ps.Read();
                    while (!packet.IsEndOfPacket())
                    {
                        switch (packet.ReadDataType())
                        {
                            case DataType.BoolType:
                                bool boolValue = packet.ReadBool();
                                break;
                            case DataType.ByteArrayType:
                                byte[] buffer = packet.ReadBytes();
                                break;
                            case DataType.ByteType:
                                byte byteValue = packet.ReadByte();
                                break;
                            case DataType.CharType:
                                char charValue = packet.ReadChar();
                                break;
                            case DataType.Int32Type:
                                Console.WriteLine("Int32Type:  " + packet.ReadInt32().ToString());
                                break;
                            case DataType.StringType:
                                Console.WriteLine("String:  " + packet.ReadString());
                                break;
                            default:
                                break;
                        }
                    }
                    break;
                }
                System.Threading.Thread.Sleep(1000);
            }
            ps.Close();
            device.Disconnect();
            Console.ReadLine();
        }

    }

    // Returns a platform if the supplied name can be found in the datastore.
    // Returns null pointer if platform cannot be found
    private static Platform GetPlatformByName(string p, DatastoreManager dsmgr)
    {
        // Get all platforms in the datastore.
        Collection<Platform> platforms = dsmgr.GetPlatforms();

        // Find the platform whose name matches the parameter.
        foreach (Platform platform in platforms)
        {
            if (platform.Name == p) return platform;
        }
        return null;

    }
}

繼承階層架構

System.Object
  Microsoft.SmartDevice.Connectivity.Packet

執行緒安全

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

請參閱

參考

Packet 成員

Microsoft.SmartDevice.Connectivity 命名空間