StreamSocketは確かに使いやすい!


実际の通信を実现するために、TCP/UDPは必ずその1つを取って、时にはTCP+UDPを一绪に使わなければなりませんが、Socket通信といえば、前に私も文章を书いたことがあります.本当に面倒で、コントロールができません.牛迫のCプログラマーはLinux CでSocket通信を実现することができますが、そのコード量は......VBは确かに简単ですが、机能は......JavaとC#は実は简単です.バックグラウンドスレッドが走っていて、ループ受信も悪くないが、Windows Phoneという熊の子は非同期で、Windows Phone 7.5のSocket通信は異常に面倒で、制御しにくい.WP 8+.NET 4.5の時代になり、ついにStreamSocket類が誕生し、Socket通信が便利になった.
StreamSocketの基本フローは、一般的なSocket通信と同様に、接続の確立、データの送信/受信、接続の中断に分けられます.
3つのステップは簡単で、AsyncとAwaitキーワードを組み合わせて、WP 8/Win 8プラットフォームでSocket通信を簡単に実現できます.
まず、新しいオブジェクトをインスタンス化します.
StreamSocket clientSocket = new StreamSocket();

1.接続の確立:
	
        async void connect()
        {
            try
            {
                HostName serverHost = new HostName("192.168.0.1");  //     IP
                await clientSocket.ConnectAsync(serverHost, 3000);  //        
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                clientSocket.Dispose();
                clientSocket = null;
            }
        }
異常がなければ、Socket接続はすでに確立されており、TCPやUDPタイプを考慮する必要もなく、同時にこの方法は自動的に非同期動作を実現し、呼び出すのも非常に簡単です.
2.データの受信/送信:
Socket通信は本質的にデータストリームの伝送、すなわちbyteタイプであるため、StreamSocketはDataReaderクラスとDataWriterクラスを用いてデータストリームを受信し送信し、2つのクラスは多くの実用的な方法をカプセル化しているが、結局byteタイプのデータの読み取りと送信のカプセル化である.2つのクラスで提供されるいくつかの方法について説明します.
DataReaderが提供するデータの読み出し方法:

        public bool ReadBoolean();

        public IBuffer ReadBuffer(uint length);
 
        public byte ReadByte();

        public void ReadBytes(byte[] value);
       
        public DateTimeOffset ReadDateTime();
        
        public double ReadDouble();
       
        public Guid ReadGuid();
       
        public short ReadInt16();
        
        public int ReadInt32();
        
        public long ReadInt64();
        
        public float ReadSingle();
        
        public string ReadString(uint codeUnitCount);
       
        public TimeSpan ReadTimeSpan();
        
        public ushort ReadUInt16();
        
        public uint ReadUInt32();
        
        public ulong ReadUInt64();

DataWriterが提供するデータの送信方法:
	
        public void WriteBoolean(bool value);

	public void WriteBuffer(IBuffer buffer);
     
        public void WriteBuffer(IBuffer buffer, uint start, uint count);
       
        public void WriteByte(byte value);
     
        public void WriteBytes(byte[] value);
        
	public void WriteDateTime(DateTimeOffset value);
      
        public void WriteDouble(double value);
      
        public void WriteGuid(Guid value);
        
        public void WriteInt16(short value);
        
        public void WriteInt32(int value);
        
        public void WriteInt64(long value);
      
        public void WriteSingle(float value);
    
        public uint WriteString(string value);
        
	public void WriteTimeSpan(TimeSpan value);
      
        public void WriteUInt16(ushort value);
      
        public void WriteUInt32(uint value);
     
        public void WriteUInt64(ulong value);
の両方は、関連パラメータを直接伝達したり、ストリームから共通タイプの戻り値を直接取得したりすることができる共通タイプを直接取得または送信する方法を提供し、もちろんストリームを直接処理してもよい.次に、読み書きデータの例を各一例挙げる.
まず、StreamSocketクラスでインスタンス化されたオブジェクトが空でないことを保証し、接続状態であることを保証しますが、try/catch文を使用します.
受信データ:

        DataReader reader = new DataReader(clientSocket.InputStream); //   reader  ,  StreamSocket     reader   
        reader.InputStreamOptions = InputStreamOptions.Partial;  //      
        await reader.LoadAsync(1024);  //          
        string response = reader.ReadString(reader.UnconsumedBufferLength);  //     ,   reader          
送信データ:

        DataWriter writer = new DataWriter(clientSocket.OutputStream);  //   writer  , StreamSocket      writer   
        string content = "ABCDEFGH";  //      
        byte[] data = Encoding.UTF8.GetBytes(content);  //           ,        
        writer.WriteBytes(data);  //     ,      WriteString       
        await writer.StoreAsync();  //      
        writer.DetachStream();  //  
        writer.Dispose();  //  writer

これらのプロシージャをtry/catch文に入れて、安定性を確保することをお勧めします.
Windows Phone 7.5のSocket+SocketAsyncEventArgsよりもデータの送受信方法とプロセスが簡単で、開発者がデータ処理の問題で時間と労力を節約できます.非同期、非ブロックUIスレッドを使用するため、Androidで使用されているマルチスレッドよりもシステムリソースを節約する形で、Windows Phone 8が非常に進歩している点です.
3.接続の中断
割り込み方法はどんな形式でもプラットフォームでも簡単で、ここではコードのみを提供します.

        clientSocket.Dispose();
        clientSocket = null;

このように、StreamSocketの基本的な使用方法はこのようにして、非常に簡単で手間が省け、Windows RuntimeのWindows RTとWindows 8/8.1プラットフォームを同じように適用することに対して、この方法は同様に適用され、Windows Phone 8.1の発売に伴い、マイクロソフトのプラットフォームの統一性はさらに明らかになり、WPのプログラミングモードはさらに改善され、より多くのより良い方法が.NETプログラミングに登場する.開発者に大きな便利さをもたらします!
参考までに、私が試合に参加した例を以下に示します.https://voiceworkwp.codeplex.com/
転載は出典を明記してください.http://blog.csdn.net/yuanguozhengjust/article/details/19175085