天天看點

在Silverlight中使用Socket進行通信(1)Socket"請求-回複"方式的簡易資料交換

很久之前用過Socket,由于近期項目需要用socket傳輸視訊流,早上花了半小時回顧了一下。

socket下提供的主要類有四個,分别是socket,tcpclient,tcplistener,udpclient,他們的作用如下:

Socket 含有大量方法用于網絡連接配接,.net中的一些進階類如webrequest,tcpclient等均調用此類來進行操作

TcpClient  提供用戶端連接配接,用于建立和使用tcp網絡服務

TcpListener  用于從tcp網絡用戶端偵聽連接配接

UdpClient  為udp用戶端建立連接配接,是tcp的備用協定,在本地網絡使用

這個Demo含有兩個project,一個是server,一個是client,為了簡潔,均采用控制台程式

服務端:

代碼

using System; 

using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using System.IO; 

using System.Net.Sockets; 

namespace SocketServer 

    class Program 

    { 

        public static TcpListener tcpListener; 

        private static NetworkStream networkStream; 

        private static StreamReader streamReader; 

        private static StreamWriter streamWriter; 

        public static Socket socketForClient; 

        static void Main(string[] args) 

        { 

            try 

            { 

                tcpListener = new TcpListener(1234); 

                tcpListener.Start(); 

                Console.WriteLine("服務啟動,開始監控1234端口"); 

                socketForClient = tcpListener.AcceptSocket(); 

                networkStream = new NetworkStream(socketForClient); 

                streamWriter = new StreamWriter(networkStream); 

                streamReader = new StreamReader(networkStream); 

                try 

                { 

                    if (socketForClient.Connected) 

                    { 

                        Console.WriteLine("用戶端已連接配接"); 

                        string strInput = streamReader.ReadLine(); 

                        Console.WriteLine("從用戶端傳入的字元串是:" + strInput); 

                        string strOutput = strInput.ToUpper(); 

                        streamWriter.Write(strOutput); 

                        Console.WriteLine("轉換後字元串是" + strOutput); 

                        streamWriter.Flush(); 

                    } 

                } 

                catch (Exception ex) 

                    Console.WriteLine("出現異常:" + ex.Message); 

            } 

            catch(Exception ex) 

                Console.WriteLine("發生異常,關閉連接配接"); 

                tcpListener.Stop(); 

                streamWriter.Close(); 

                streamReader.Close(); 

                networkStream.Close(); 

        } 

    } 

}

用戶端:

namespace SocketClient 

        public static TcpClient myclient; 

                    myclient = new TcpClient("localhost", 1234); 

                    Console.WriteLine("已經連接配接到localhost的1234端口"); 

                    Console.WriteLine("未能在1234端口連接配接上伺服器"); 

                networkStream = myclient.GetStream(); 

                Console.WriteLine("請輸入一串小寫字母:"); 

                string strInput = Console.ReadLine(); 

                streamWriter.Write(strInput); 

                Console.WriteLine("正在發送消息"); 

                streamWriter.Flush(); 

                string strServerComes = streamReader.ReadLine(); 

                Console.WriteLine("正在從服務端收取消息"); 

                Console.WriteLine("從服務端收到的消息是:" + strServerComes); 

<a target="_blank" href="http://blog.51cto.com/attachment/201106/234255887.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201106/234311884.png"></a>

在windows 7 中需要安全設定,否則socket将無法正常通路端口。

接下來将會做socket與silverlight傳輸文本及視訊流的嘗試。

     本文轉自wengyuli 51CTO部落格,原文連結:http://blog.51cto.com/wengyuli/587601,如需轉載請自行聯系原作者

繼續閱讀