全般的
ポート番号を使用してIPアドレスに接続し、非常に単純なラインコマンドを要求してから、応答をGridbox、グラフ、またはその他の表示オプションに配置するために、C#で非常に単純なTCPIPクライアントサーバーを作成しようとしています。
私がオンラインで調べたところ、Jayan Nair によって書かれた、まさにこれを行うダウンロード可能なユーティリティが見つかりました。これは、メッセージを正しく送信し、応答を正常に受信しているようです。
問題は、返信データをリッチテキストまたは GridView に読み込もうとしたときに発生します。
私が得ているエラーメッセージは次のとおりです:- System.InvalidOperationException
Microsoft フォーラムに問い合わせたところ、何をすべきかについて、非常に複雑で、あいまいで、過度に複雑な指示がありました。これには、INVOKE と BeginInvoke と呼ばれるものが含まれており、すべてが独自のプロジェクトのようです。右。
私が求めているのは、複雑になりすぎずに機能する単なる例です。
コードは次のとおりです:-
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
int iRx = theSockId.thisSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
//
System.String szData = new System.String(chars);
richTextRxMessage.Text = szData; // fails
//textBox1.Text = szData; // also fails
WaitForData();
}
エラーメッセージは次のとおりです:-
base {System.Windows.Forms.TextBoxBase} = {Text = '((System.Windows.Forms.RichTextBox) (((System.Windows.Forms.RichTextBox)(richTextRxMessage)))).Text' threw an exception of type 'System.InvalidOperationException'}
追加情報は次のとおりです: -szDataには、タブ(9)とリターン(13)を含む約6300文字が含まれており、サーバーから送信されたメッセージと一致していますリッチテキストの代わりにテキストボックスを使用して試しましたが、同じ結果です
興味のある方へ
マイクロソフトのリンクはこちら
public void OnDataReceived(IAsyncResult asyn)
{
int InputRx;
int charLen;
char[] Inputchars;
System.Text.Decoder InputDecode;
System.String szData;
bool IfInvokeRequired;
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
InputRx = theSockId.thisSocket.EndReceive(asyn); // get size of input array
Inputchars = new char[InputRx + 1]; // put i char array
InputDecode = System.Text.Encoding.UTF8.GetDecoder();
charLen = InputDecode.GetChars(theSockId.dataBuffer, 0, InputRx, Inputchars, 0);
szData = new System.String(Inputchars);
IfInvokeRequired = richTextRxMessage.InvokeRequired;
if (IfInvokeRequired == true)
{
richTextRxMessage.Invoke((MethodInvoker)delegate { this.Text = szData; });// fails
richTextRxMessage.BeginInvoke(new MethodInvoker(() => richTextRxMessage.Text = szData));//fails as well
}