0

クラス TcpClient のメソッド .Connect に問題があります。

IP 10.0.0.134 のポート 9100 でリッスンしている TcpServer が正常に動作しています。

mySocket.Connect("10.0.0.134",9100) で接続しています

(私は mySocket = new System.Net.Sockets.TcpClient("10.0.0.134",9100) と mySocket = new System.Net.Sockets || mySocket.Connect("10.0.0.134",9100) のみを試しました)

しかし、この ROW のソフトウェアは 12 ~ 13 秒間スタックします。その後、例外を読み取ることができます

"System.Net.Sockets.SocketException"

Try/Catch でキャッチされないため、エラーの説明が表示されません。

接続速度を改善するためのアイデアはありますか?

結局、接続は機能しており、TCP/IP 経由でデータを送信できます

Compact Framework 3.5 と Visual Studio 2008 を使用して Windows CE 6 でソフトウェアを開発しています。

4

2 に答える 2

1

どうしても必要な場合を除き、ソケットの初期化をクラス コンストラクターに配置しないでください。

必要に応じて、次をハードコーディングしますSocketException

private bool abortListener;
private TcpListener listener;
private TextBox textBox1;

public TCP_Class() {
  abortListener = false;
  try {
    listener = new TcpListener(System.Net.IPAddress.Any, 8000);
  } catch (SocketException err) {
    listener = null;
    textBox1.Text = err.Message;
  }
}

public void Listen(string ipString, int port) {
  if ((listener == null) || !String.IsNullOrEmpty(ipString)) {
    listener = new TcpListener(System.Net.IPAddress.Parse(ipString), port);
  }
  listener.Start();
  while (!abortListener) {
    try {
      using (var client = listener.AcceptTcpClient()) {
        // ...

コードの残りの部分は省略されていますが、これで作業は完了です。

アップデート:

わかりました。何が問題なのかを調べるには、エラー メッセージを表示する必要があります。

プロジェクトで例外が発生した場合、私のプロジェクトで作成した次のようなものが表示される可能性が最も高いです。

例外のスクリーンショット

これにより、開始するためのいくつかのことが得られます。

  • まず、私の写真のボックスは、DivideByZeroExceptionがキャッチされたことを示しているため、このタイプの例外を処理するようにコードを記述する必要があります。

    {リスナー=新しいTcpListener(strIpAddress、intPort)を試してください。キャッチ (DivideByZeroException エラー) { }

いいえ、例外は DivideByZeroException ではないため、コードを編集して、キャッチされた例外のタイプを処理する必要があります

  • 次は、コードの「その例外を処理する」部分です。ソフトウェアプログラマーとして、どうすればそれを防ぐことができますか? そのタイプの例外をキャッチするのに十分な知識がある場合は、通常、コードを書き直して、そのような例外が発生しないようにすることができます。

スクリーンショットのコード例の場合、簡単な解決策は次のとおりです。

if (denom != 0) {
  answer = num / denom;
} else {
  answer = -1;
}

ちょっと待って!もっとある。

上の図のようなダイアログ ボックスが表示されたままになっている場合は、[ Actions:]セクションの [View Detail...] をクリックして、スタック トレースと、存在する場合と存在しない場合がある内部例外を取得できます。

詳細スクリーンショットを表示

それを手に入れたら、すべてのストーリーを知る必要があります。

特定の例外の処理方法がわからない場合は、例外名とその例外のメッセージを検索してください。明らかに、他の誰かが既にその問題に遭遇しているか、または Microsoft がそれをキャッチするためのルーチンを作成していない可能性があります。

于 2013-07-15T16:18:49.370 に答える