2017-03-24 15 views
-1

自動接続でサーバークライアントプログラムを作成しました。 しかし、プログラムは、クライアントが接続する必要があるため、初めてサーバーアプリケーションを起動する場合にのみ機能します。 私の目標は、サーバーが既に作成されている場合、クライアントが2秒の遅れでチェックすることです。 私は試行錯誤のサイクルのためにwhile文を作っC#サーバーに接続しようとしています

try 
{ 
    int a = 1; 
    while (a == 1) 
    { 
     cliente.Connect(IP_End); 
     if (cliente.Connected) 
     { 
      connectRead(); 
      a = 2; 
     } 
     else 
     { 
      while (!cliente.Connected) 
      { 
       int milliseconds = 2000; 
       Thread.Sleep(milliseconds); 
       cliente.Connect(IP_End); 
       MessageBox.Show(text); 

       if (cliente.Connected) 
       { 
        connectRead(); 
       } 
      } 
     } 
    } 
} 
catch(SocketException se) 
{ 
    MessageBox.Show(se.Message); 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

エラーは次のとおりです。ターゲットコンピュータが積極的にそれらを192.168.254.28:100

を拒否したため、

接続なしで行うことができます

方法はここにあります:

private void connectRead() 
{ 
    STW = new StreamWriter(cliente.GetStream()); 
    STR = new StreamReader(cliente.GetStream()); 
    STW.AutoFlush = true; 

    backgroundWorker1.RunWorkerAsync(); 
    backgroundWorker1.WorkerSupportsCancellation = true; 
} 
+0

コードの画像を投稿しないでください。 – musefan

+0

2番目のループの 'if'ステートメントで' a = 2; 'を設定してください。 – GibralterTop

+0

また、何が起こっているのですか、どのような結果が欲しいですか? – GibralterTop

答えて

0

エラーや必要な機能について詳しく知ることなく、2回目のループを実行するとconnectRead();を2回呼び出すと言うことができます。これはこれで、あなたの第二のループを置き換える修正するには:

while (!cliente.Connected) 
{ 
    int milliseconds = 2000; 
    Thread.Sleep(milliseconds); 
    cliente.Connect(IP_End); 

    if (cliente.Connected) 
    { 
     connectRead(); 
     a = 2; 
    } 
} 

EDIT:それは不必要なようだし、あなたがMessageBoxOkを打つまで、プログラムを一時停止しますので、私はまたMessageBoxを取り出した

EDIT 2:あなたはほとんどそれが正しい得たコードに基づいて

Question on actively refused connections

Question on determination of open port

+0

エラー: ターゲットコンピュータが積極的にそれらを拒否したため、接続できません192.168.254.28:100 –

+0

if(cliente.Connected) { connectRead(); a = 2; //このような状況では何もしない } –

+0

ネットワークに問題があり、ファイアウォールの設定を確認し、ポート100が開いているかどうかを確認し、PCから '192.168.254.28'に到達できることを確認する必要があります(' ping 'it) – GibralterTop

0

。私は "Connect"拡張メソッドは、クライアント内の値を更新する必要がありますと信じています。それが私のやり方をするならば、ブール値を返す別のメソッドを導入し、コードを単純化するのに役立つでしょう。例:

private bool ConnectClient(SomeClient clientToConnect, IPAddress ipToConnectTo, int delay) 
{ 
    System.Threading.Thread.Sleep(delay); 
    clientToConnect.Connect(ipToConnectTo); 
    return clientToConnect.Connected; 
} 

try 
{ 
    bool successfulConnection; 

    while (!successfulConnection) 
    { 
     successfulConnection = ConnectClient(yourClient, "10.10.10.10", 2000); 
    } 
} 
catch 
{ 
// ... 
} 
関連する問題