采用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;
  }

 

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