採用TCPListener/TCPClient實現圖片傳輸

基本概念

TCPClient:基於Tcp的客戶端封裝類,用於簡化Tcp客戶端的開發。主要通過構造帶入主機地址或者IPEndPonint對象,然後調用Connect進行和服務器點對點的連接,連接成功後通過GetStream方法返回NetworkStream對象。

TCPListener:基於Tcp的服務器端封裝類,用於監聽服務端或客戶端的連接請求。一旦有連接請求信息,立刻交給TcpClient的AcceptTcpClient方法捕獲,Start方法用於開始監聽。

服務器端代碼

private string address = "127.0.0.1";
private int port = 4321;
private TcpListener listener;

// 開始監聽
listener = new TcpListener(IPAddress.Parse(address), port);
listener.Start();

byte[] bStream = ReadImageFile("1.jpg");
// 一旦有客戶端連接上來,則發送圖片給客戶端

while (true)  {

                using (TcpClient client = listener.AcceptTcpClient())
                {
                    Console.WriteLine("Connected");
                    NetworkStream nStream = client.GetStream();

                    try
                    {
                        nStream.Write(bStream, 0, bStream.Length);
                    }
                    catch (SocketException e1)
                    {
                        Console.WriteLine("SocketException: " + e1);
                    }
                }
 }

將圖片轉成字節流

 private static byte[] ReadImageFile(String img)
        {
            FileInfo fileinfo = new FileInfo(img);
            byte[] buf = new byte[fileinfo.Length];
            FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
            fs.Read(buf, 0, buf.Length);
            fs.Close();
            GC.ReRegisterForFinalize(fileinfo);
            GC.ReRegisterForFinalize(fs);
            return buf;
}

客戶端代碼

  IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
  using (TcpClient client = new TcpClient())
   {
                client.Connect(ipAddress, 4321);
                label1.Text = "Connected...";

                NetworkStream nNetStream = client.GetStream();
                Image returnImage = Image.FromStream(nNetStream);
                pictureBox1.Image = returnImage;
  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章