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