私はコードソケットアプリケーションblocingソケットを使用してマルチスレッドを使用しています..私の問題は、私は2つの大きなパケットを受信したいです..私たちは、複数packet..thisへの大規模なデータシナリオ:どのようにパケットが受信することを決定する最初のパケットの一部ですC#
- 私は、同時に2つの別々のパケット
- に6メガバイトのテキストファイルとTCP分割パケットを送信する私は26メガバイトのビデオファイルやTCPを送っても、分割パケットに2別パケット
- 私のアプリケーションでは、テキストファイルの最初の部分を受け取ります。3 mbの6 MB
- その後、私は、ビデオの最初の部分を受け取るには、質問は、私はビデオファイルのテキストファイルと最初のパケットの最初のパケットが異なるデータであることを知っているべきかである26メガバイトの13メガバイト...
それを言うてみましょう.. ..別の方法で事前に
感謝..
を私の悪い英語のための
申し訳ありません(多分別のバッファを??)を扱うこの私のコードの一部
ns = client.GetStream();
while (isListen == true && client.Connected)
{
while (!ns.DataAvailable)
{
try
{
Thread.Sleep(1);
}
catch (Exception ex)
{
}
}
data = new byte[client.ReceiveBufferSize];
//client.Client.Receive(data);
int indx = ns.Read(data, 0, data.Length);
string message = Encoding.ASCII.GetString(data, 0, indx);
if (message == GetEnumDescription(TypeData.Disconnect))
{
isListen = false;
server.ClientKeluar = objClient;
if (ClientDisconnected != null)
{
ClientDisconnected(objClient);
}
thisThread.Abort();
Server.kumpulanThread.Remove(thisThread);
Server._serverConnections.Remove(this);
client.Close();
}
else if (message.Contains(GetEnumDescription(TypeData.GetFile)))
{
//jalankan proses pengambilan data
}
else if (message.Contains(GetEnumDescription(TypeData.ByteLength)))
{
string length = message.Substring(6, message.Length - 6);
int len = int.Parse(length);
expectedLength = client.ReceiveBufferSize = len;
data = new byte[len];
}
else if (message.Contains(GetEnumDescription(TypeData.Image)))
{
typeData = "Image";
dat1 = new byte[client.ReceiveBufferSize];
index = 0;
}
else if (message.Contains(GetEnumDescription(TypeData.Video)))
{
typeData = "Video";
dat2 = new byte[client.ReceiveBufferSize];
index = 0;
}
else
{
if (typeData == "Image")
{
expectedLength = expectedLength - message.Length;
if (expectedLength == 0)
{
Array.Copy(data, 0, dat1, index, message.Length);
if (ImageDelivered != null)
{
ImageDelivered(dat1);
}
}
else
{
Array.Copy(data, 0, dat1, index, message.Length);
index = message.Length;
}
}
else if (typeData == "Video")
{
expectedLength = expectedLength - message.Length;
if (expectedLength == 0)
{
Array.Copy(data, 0, dat2, index, message.Length);
if (VideoDelivered != null)
{
VideoDelivered(dat2);
}
}
else
{
Array.Copy(data, 0, dat2, index, message.Length);
index = message.Length;
}
}
else
{
expectedLength = expectedLength - message.Length;
if (expectedLength == 0)
{
dataToWrite = dataToWrite + message;
string text = dataToWrite;
if (MessageDelivered != null)
{
MessageDelivered(text);
}
dataToWrite = "";
}
else
{
dataToWrite += message;
}
}
}
}
誰もがこの問題を解決するためのインスピレーションを得ることができますか?
私は質問を理解するのに苦労していますが、私が想定しているように、アプリケーションがハンドシェイクパケットを送信して、サーバに何を期待するかを知らせることができます。 – lordcheeto