小さな画像を送受信するウェブカメラアプリを作っています。私はそれを送受信できるようにしました。私は127.0.0.1でテストしましたが、うまくいきましたが、今は自分の外部IPアドレスを使用しています。画像を1つ送信して受信してしまいましたイメージサイズの大規模な整数値の何らかの並べ替え、それがクラッシュにつながるマイナスの値、私は多分受信と送信が自分自身で実行されていると思うし、何とか同期が外れている。私は各画像を送信する前に1000msの遅延を入れて、それは遅いが働いていた、私が遅延を取り除くとすぐに、それはうんざりする。TCPパケット送信エラー
// This sends.
private void NewFrameReceived(object sender, NewFrameEventArgs e)
{
Bitmap img = (Bitmap)e.Frame.Clone();
byte[] imgBytes = EncodeToJpeg(img, 25).ToArray();
if (_tcpOut.Connected)
{
NetworkStream ns = _tcpOut.GetStream();
if (ns.CanWrite)
{
System.Threading.Thread.Sleep(500);
ns.Write(BitConverter.GetBytes(imgBytes.Length), 0, 4);
ns.Write(imgBytes, 0, imgBytes.Length);
}
}
}
// This receives.
private void listeningThread_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
// start listening for connections
_tcpIn = new TcpListener(IPAddress.Any, 54321);
_tcpIn.Start();
TcpClient _inClient = _tcpIn.AcceptTcpClient();
while (true)
{
NetworkStream ns = _inClient.GetStream();
if (ns.CanRead && ns.DataAvailable)
{
Byte[] imgSizeBytes = new Byte[4];
ns.Read(imgSizeBytes, 0, 4);
int imgSize = BitConverter.ToInt32(imgSizeBytes, 0);
Byte[] imgBytes = new Byte[imgSize]; <-- ERROR, GET CRAZY LARGE VALUE
ns.Read(imgBytes, 0, imgSize);
MemoryStream ms = new MemoryStream(imgBytes);
Image img = Image.FromStream(ms);
picVideo.Image = img;
}
}
}
あなたは例外を投稿できますか? –
こんにちは、時々私は "算術演算はオーバーフローの結果となります。"メモリオーバーフローが発生することがあります。 (また、エラーラインは下の行に修正されました) – sprocket12
あなたの質問に適切に答えるには、変数と未知数が多すぎます。最初のステップとして、最初の送信から何バイトが実際に受信されているかを確認し、送信されているものと一致することを証明することをお勧めします。画像の大きさに応じて、送信されるデータの断片化にぶつかる可能性があります。 –