当我尝试使用 C# 套接字发送图像时,我总是收到不完整的图像。而且我收到的大小没有确定,假设我尝试发送一个 50 KB 的数据,我可能会收到 30、38、25、20 等等......完全随机。所以这是我的代码,如果你能帮我解决这个问题,我会很高兴。谢谢你。
客户端:
Socket soketDinleme;
byte[] gelenByte = new byte[999999999];
private void frmAnaform_Load(object sender, EventArgs e)
{
soketDinleme = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soketDinleme.Bind(new IPEndPoint(IPAddress.Any, 4800));
soketDinleme.Listen(1);
soketDinleme.BeginAccept(new AsyncCallback(KabulEdilme), null);
}
void KabulEdilme(IAsyncResult iar)
{
Socket soket = soketDinleme.EndAccept(iar);
soket.BeginReceive(gelenByte, 0, gelenByte.Length, SocketFlags.None, new AsyncCallback(VeriGeldiginde), soket);
soketDinleme.BeginAccept(new AsyncCallback(KabulEdilme), null);
}
void VeriGeldiginde(IAsyncResult iar)
{
Socket soket = (Socket)iar.AsyncState;
int uzunluk = soket.EndReceive(iar);
byte[] veri = new byte[uzunluk];
Array.Copy(gelenByte, veri, veri.Length);
string kontrol = Encoding.UTF8.GetString(veri);
if (kontrol.Contains("kaydol"))
{
ServerIslemler.Kaydol.ResimKaydet(veri);
}
else
{
MemoryStream ms = new MemoryStream(veri);
Image profilResmi = Bitmap.FromStream(ms);
profilResmi.Save("C:/denemeResim.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Close();
}
}
服务器端:
public static void KayıtVerisiGonder(string gonderilcek, string resimYolu)
{
//byte[] metin = Encoding.UTF8.GetBytes("kaydol/" + gonderilcek + IP() + "|");
Bitmap bmp = new Bitmap(resimYolu);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Jpeg);
byte[] resim = ms.ToArray();
bmp.Dispose();
ms.Close();
Socket soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4800));
soket.Send(resim, 0, resim.Length, SocketFlags.None);
soket.Close();
}