編集: 私がここでやろうとしていたことと答えのより簡潔な説明
ソースからデータを受信するために C# 非同期ソケットを使用しています。
私の問題は、受信するデータがさらにある場合、受信したデータをどのように、どこに保存するかです。
文字列を受信したら、文字列ビルダーを使用して、msdn から次のように受信して保存できます。
private void ReceiveCallback_onQuery(IAsyncResult ar)
{
try
{
// Retrieve the state object and the client socket
// from the asynchronous state object.
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
// Read data from the remote device.
int bytesRead = client.EndReceive(ar);
if (bytesRead > 0)
{
// There might be more data, so store the data received so far.
dataReceived += state.buffer; //Does not work (dataReceived is byte[] type)
// Get the rest of the data.
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback_onQuery), state);
}
else
{
// All the data has arrived; put it in response.
if (dataReceived > 1)
{
response_onQueryHistory = ByteArrayToObject(dataReceived)
}
// Signal that all bytes have been received.
receiveDoneQuery.Set();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
私の場合のように、受信したデータを文字列に変換したくありません。複雑なオブジェクトを受信しています。
送信されたデータはシリアル化されており、逆シリアル化も問題ありません。
文字列ビルダーを使用せずにソケットからデータを「継続的に」受信する方法についての私の質問です。
ありがとう!