发送端:
- FileStream fs = new FileStream(@"7.jpg", FileMode.Open);
- private void SendImage()
- {
- //实例化socket
- Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 56799);
- socket.Connect(ipep);
- long contentLength = fs.Length;
- //第一次发送数据包的大小
- socket.Send(BitConverter.GetBytes(contentLength));
- while (true)
- {
- //每次发送128字节
- byte[] bits = new byte[128];
- int r = fs.Read(bits, 0, bits.Length);
- if (r <= 0) break;
- socket.Send(bits, r, SocketFlags.None);
- }
- socket.Close();
- fs.Position = 0;
- }
接收端:
- private void RecviveImage()
- {
- new Thread(delegate ()
- {
- Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 56799);
- socket.Bind(ipep);
- socket.Listen(2);
-
- while (true)
- {
- try
- {
- byte[] data = new byte[8];
- Socket clientSocket = socket.Accept();
- if (clientSocket.Connected)
- {
- clientSocket.Receive(data, data.Length, SocketFlags.None);
- long contentLength = BitConverter.ToInt64(data, 0);
- int size = 0;
- MemoryStream ms = new MemoryStream();
-
- while (size < contentLength)
- {
- byte[] bits = new byte[128];
- int r = clientSocket.Receive(bits, bits.Length, SocketFlags.None);
- if (r <= 0) break;
- ms.Write(bits, 0, r);
- size += r;
- }
-
- Image img = Image.FromStream(ms);
- this.Invoke((EventHandler) delegate
- {
- pictureBox1.Image = img; //更新在窗体控件上
- });
-
- clientSocket.Close();
- ms.Flush();
- ms.Close();
- ms.Dispose();
- }
- }
- catch { }
- }
- })
- { IsBackground = true }.Start();
- }