基本概念
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;
}