[C#] イメージデータをTCPでやりとりする
以下の方法でいいのだろうか、、一応できてはいるんだけど。
- クライアント側
byte[] buffer = new byte[1024*1024];
System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
pictureBox1.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);try
{
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ip = ipHostInfo.AddressList[0];
IPEndPoint remoteEP = new IPEndPoint(ip,11111);
Socket client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);client.Connect(remoteEP);
client.Send(buffer);client.Shutdown(SocketShutdown.Both);
client.Close();System.Windows.Forms.MessageBox.Show("送信に成功しました");
}
catch(Exception x)
{
System.Windows.Forms.MessageBox.Show(x.ToString());
}
- サーバ側
Socket server=null;
try
{
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ip = ipHostInfo.AddressList[0];
IPEndPoint localEP = new IPEndPoint(ip,11111);server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
server.Bind(localEP);
server.Listen(10);Socket connector = server.Accept();
byte[] buffer = new byte[1024*1024];
int Total=0;while(true)
{
byte[] tmp = new byte[1024*1024];
int nReceive = connector.Receive(tmp);
if( nReceive == 0 ){ break; }
Array.Copy( tmp, 0, buffer, Total, nReceive );
Total += nReceive;
}connector.Shutdown(SocketShutdown.Both);
connector.Close();// byte[] -> Image
using( System.IO.MemoryStream ms = new System.IO.MemoryStream( buffer ) )
{
pictureBox1.Image = Image.FromStream(ms);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}