2016-04-19 9 views
0

私はこのプログラムを使用してIPアドレスの範囲をソケット化すると、メッセージなしでいつも単独で閉じます。プログラムは終了します。この問題を解決するにはどうすればよいですか? (コンソールプロジェクトです)C#socket program auto close

public static void Main(string[] args) 
{ 
    Task[] tasks = new Task[200]; 
    for (int i = 0; i < 200; i++) 
    { 
     tasks[i] = Task.Factory.StartNew(() => RunningThread()); 
    } 
    Task.WaitAll(tasks); 
    Console.WriteLine("finish..."); 
    Console.ReadKey(); 
    //..... 
} 

public bool SocketIP(string ip, int port) 
{ 
    AutoResetEvent arEvent = new AutoResetEvent(false); 
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

    if (socket != null) 
    { 
     socket.Bind(new IPEndPoint(IPAddress.Any, 0)); 
     socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ip), port), CallBack, new ArrayList() { socket, arEvent}); 
     arEvent.WaitOne(WaitTime); 
     if (Rv) 
      socket.Shutdown(SocketShutdown.Both); 
     socket.Close(); 
     socket = null; 
    } 
    return Rv; 
} 


void CallBack(IAsyncResult ar) 
{ 
    ArrayList list = (ArrayList)ar.AsyncState; 
    Socket socket = (Socket)list[0]; 

    AutoResetEvent arevent = (AutoResetEvent)list[1]; 

    if (ar.IsCompleted && socket.Connected) 
     Rv = true; 
    arevent.Set(); 
} 

答えて

0

あなたのコードがConsole.ReadKey()で停止するはずです。おそらく、プログラムで処理されていないクラッシュがあります。例外のExでExの完全なメイン関数en debugを試してみてください。 は、私はこのような意味:

が主な機能で私の悪いdescribe.Actuallyのため申し訳ありません
public static void Main(string[] args) 
{ 
try{ 
    Task[] tasks = new Task[200]; 
    for (int i = 0; i < 200; i++) 
    { 
     tasks[i] = Task.Factory.StartNew(() => RunningThread()); 
    } 
    Task.WaitAll(tasks); 
    Console.WriteLine("finish..."); 
    Console.ReadKey(); 
    //..... 
} 
catch(Exception ex) 
{ 
Console.WriteLine(ex.Message); <<<--(break point here) 
} 
} 
+0

、私はit.Butにそれをデバッグ誰を取得しないようにしてくださいキャッチを書き留めあるuseful.Tryキャッチは、任意の例外をキャッチすることはできません。これはExキャッチ例外に属していませんか? –

+0

エラーが検出されたかどうかを確認します。 –

+0

エラーを検出しません。 –