2017-08-09 81 views
-1

目前,我正在做一個軟件平臺,爲我自己。我有客戶端和服務器端軟件。我正在使用異步套接字,並且在連接時遇到了一些問題。這是我的連接功能。Conneting到異步插座由於某種原因失敗

private bool ConnectSocket() 
{ 
    try 
    { 
     if((this.soket != null) && this.soket.Connected) 
     { 
      this.soket.Shutdown(SocketShutdown.Both); 
      Thread.Sleep(10); 
      this.soket.Close(); 
      return false; 
     } 
     this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip); 
     IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de); 
     this.soket.Blocking = false; 
     AsyncCallback callback = new AsyncCallback(this.OnSocketConnect); 
     this.soket.BeginConnect(EndPoint, callback, this.soket); 
     if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket"); 
     return true; 

    } 
    catch(SocketException ex) 
    { 
     MessageBox.Show("Dogodila se greska prilikom povezivanja na server"); 
     Console.WriteLine(ex.ToString()); 
    } 
    return false; 
} 

即使我沒有連接我的服務器,它會識別(偵聽)我的連接,並且存在某種連接。問題是,我不能從這個點繼續,我不能發送任何數據,因爲我得到一個異常不連接,還我不打算過去的這個if語句。

if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket"); 

任何有關如何解決這件事的建議?

回答

1

不是100%肯定你想什麼來完成,但是在if語句是你要關閉連接,如果有一個現有的已經在看你嘗試捕捉?以下是我會嘗試的一些簡單建議。

private bool ConnectSocket() 
    { 
     try 
     {     
      this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip); 
      IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de); 
      this.soket.Blocking = false; 
      AsyncCallback callback = new AsyncCallback(this.OnSocketConnect); 
      this.soket.BeginConnect(EndPoint, callback, this.soket); 
      if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket"); 
      return true; 

     } 
     catch(SocketException ex) 
     { 
      MessageBox.Show("Dogodila se greska prilikom povezivanja na server"); 
      Console.WriteLine(ex.ToString()); 
     } 
     return false; 
    } 

上面的解決方案只是試圖重置連接而不關閉像if語句中似乎發生的那樣。

private bool ConnectSocket() 
     { 
      try 
      {     
       this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip); 
       IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de); 
       this.soket.Blocking = false; 
       AsyncCallback callback = new AsyncCallback(this.OnSocketConnect); 
       this.soket.BeginConnect(EndPoint, callback, this.soket); 
       if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket"); 
       return true; 
       if((this.soket == null) && this.soket.Connected == false)<-- or what ever the evaluation for not connection would be. 
        { 
         this.soket.Shutdown(SocketShutdown.Both); 
         Thread.Sleep(10); 
         this.soket.Close(); 
         return false; 
        } 

       } 
      catch(SocketException ex) 
      { 
       MessageBox.Show("Dogodila se greska prilikom povezivanja na server"); 
       Console.WriteLine(ex.ToString()); 
      } 
      return false; 
     } 

以上soltuion只是chanes的!=如果在給== NULL所以它只會緊密連接是否爲空,仔細檢查,以確保您擁有所有正確的IP地址等等等等做出了規定連接

希望這有助於!如果不讓我知道,我會刪除答案(我不得不使用答案,因爲我不能評論50代表)乾杯!

+0

我不小心,我和邏輯運算符做出misstake。但即使在那之後我無法修復它。我設法用[ManualResetEvent的]修復它(https://docs.microsoft.com/en-us/dotnet/framework/network-programming/using-an-asynchronous-client-socket) –

+0

對上,很高興你能弄清楚男人!如果你想出了一個解決方案,一定要接受我的答案或關閉線程,以便在找出答案後不會保持打開狀態。祝你的項目好運! – Chase

相關問題