|
|
|
내 공부 > 프로그래밍
작성일 : 22-04-06 10:52
|
글쓴이 :
Minuk Y.
 조회 : 1,090
|
https://phantom00.tistory.com/14 [776] |
핵심
* 이미지를 읽어와서 바이트 어레이로 변환
public byte[] ImageToByteArray(System.Drawing.Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
* 바이트 어레이 받아온것을 이미지로 변환
this.pictureBox1.Image = byteArrayToImage(_data2);
서버 쪽
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 이미지 읽어오기(하드)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dia = new OpenFileDialog();
dia.Multiselect = false;
dia.Filter = "jpg files|*.jpg";
if (dia.ShowDialog() == DialogResult.OK)
{
this.pictureBox1.ImageLocation = dia.FileName;
}
}
/// <summary>
/// 이미지를 바이트로
/// https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public byte[] ImageToByteArray(System.Drawing.Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
/// <summary>
/// 서버 대기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
this.button3.Enabled = false;
Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8081);
sListener.Bind(ipEndPoint);
sListener.Listen(20);
Console.WriteLine("클라이언트 연결을 대기합니다.");
Socket sClient = sListener.Accept();
IPEndPoint ip = (IPEndPoint)sClient.RemoteEndPoint;
Console.WriteLine("주소 {0} 에서 접속", ip.Address);
Byte[] _data = ImageToByteArray(this.pictureBox1.Image);
sClient.Send(BitConverter.GetBytes(_data.Length));
Thread.Sleep(5); // 슬립 없이 보내면 이미지 데이터 송신 오류 발생!!!!!!!!!!!
sClient.Send(_data);
sListener.Close();
}
}
}
클라이언트 쪽
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 소켓으로 읽어오기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
Socket sClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8081);
sClient.Connect(ipEndPoint);
Byte[] _data = new byte[256];
sClient.Receive(_data);
int iLength = BitConverter.ToInt32(_data, 0);
Byte[] _data2 = new byte[iLength];
sClient.Receive(_data2);
this.pictureBox1.Image = byteArrayToImage(_data2);
sClient.Close();
}
/// <summary>
/// 바이트를 image로
/// https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv
/// </summary>
/// <param name="byteArrayIn"></param>
/// <returns></returns>
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
}
}
|
|
|
|