[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());
}