0
私は未知のメッセージサイズが入っているところでtcpリスナーをセットアップしました。未知のメッセージサイズを扱う際のベストプラクティスは何か分かりません。ここでは、コードは次のようになります。未知のメッセージサイズでのtcp要求を受信
TcpListener _server = new TcpListener(_localAddr, _port);
_server.Start();
while (true)
{
if (_server.Pending())
{
Byte[] bytes = new Byte[256];//Works fine if message under this size
string data = string.Empty;
_client = _server.AcceptTcpClient();
NetworkStream stream = _client.GetStream();
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
data = data.ToUpper();
//Do stuff with data
}
}
ですから、私は256から何か大きなものに配列バイトのサイズを変更することができ気づくでしょうが、ちょうど何か私にサイズを設定するより良い方法があるかどうか私は知りません知っているのは十分です。メッセージが256より小さい場合、正常に動作します。事前
クライアントからは、次のように伝えました。MatrixがInterface Serverに送信するすべてのXMLメッセージは、EOT(0x04)バイトで終了します。これは始まりではなくメッセージの終わりです。終わりにどのようになっているのか分かりません。 – Maxqueue
上記以外の別のアプローチがあります。このapprochでは、これがメッセージの最後であることを示すデリミタが得られます。この場合、デリミタに達するまで、メッセージのバイト後にバイトを繰り返す必要があります。あなたがそれに到達する前にメッセージの終わりを知ることはできません。だから、メッセージを保持するためにいくつかのメモリを割り当てるべきですが、メッセージが割り当てられたメモリよりも大きいバイトを反復処理しているのに気がついたら、それを増やすべきです。 – YuvShap
はい、これは現在私が感謝するつもりです。ちょうど簡単な方法がないことを確認したかっただけです。 – Maxqueue