0

我遇到了類TcpClient的方法.Connect問題。TcpClient.Connect在.NET Compact Framework中花費太多時間

我有一個正常工作的TcpServer監聽端口9100在IP 10.0.0.134。

我被mySocket.Connect連接( 「10.0.0.134」,9100)

(我都嘗試mySocket =新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」

不是由嘗試捕捉/趕上,所以我不能」看錯誤描述。

任何想法來提高連接速度?

畢竟,連接是否正常工作,我可以通過TCP/IP發送數據

我開發的Windows CE 6軟件與Compact框架3.5和Visual Studio 2008

回答

1

我發現這個問題....它起源通過將ip地址作爲一個字符串connect方法。

更換

mySocket.Connect( 「10.0.0.134」,9100)

mySocket.Connect(System.Net.IPAddress.Parse( 「10.0.0.134」),9100 )

直接解決了它。

+1

我從錯誤視頻中注意到您發佈的這是VB。不幸的是,當你編碼錯誤時,VB並不總是告訴你。另一方面,C#不會讓你編譯。很高興你發現了這個問題。 – jp2code

+0

順便說一句,有沒有一種方法可以從vb.net中捕獲該異常的信息? –

+1

LOL - VB讓我一直困惑着我。嘗試在C#中創建一個小的基本項目,只需足夠的代碼即可使其工作。當C#編譯器告訴你什麼是錯誤的,並且你能夠解決問題以使其工作時,模仿VB代碼中的這些更改。 – jp2code

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()) { 
     // ... 

的代碼的其餘部分被排除在外,但應該讓你去。

UPDATE:

OK,你需要得到錯誤信息,找出哪些是錯誤的。

當項目遇到一個例外,它是最有可能出這樣的一個我在我的項目發佈:

screenshot of Exception

這就給了你一兩件事情來下手了。

  • 首先,在我的照片箱顯示DivideByZeroException被抓了,所以你的代碼應該被寫入處理這種類型的異常:

    嘗試{ 聽衆=新的TcpListener(strIpAddress,intPort ); }趕上(DivideByZeroException錯誤){}

沒有,你的例外是不是一個DivideByZeroException,所以你需要編輯的代碼來處理捕獲的異常的類型。

  • 接下來是「處理該異常」部分的代碼:發生了什麼?作爲軟件程序員,你怎麼能阻止它呢?如果您足夠了解這種類型的異常,通常可以重寫代碼以防止它發生。

對於截圖我的代碼示例的情況下,簡單的解決辦法是:

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

別急!還有更多。

當您看到類似於上圖所示的對話框時,您可以單擊Actions:部分中的「View Detail ...」以獲取Stack Trace和任何可能或可能會發生的內部異常不存在:

View Detail screenshot

一旦你的,你應該知道整個故事。

如果你不知道如何處理特定的異常,做的異常名搜索,並以該異常的消息。很明顯,其他人已經遇到過這個問題,或者微軟不會爲了捕捉它而編寫例程。

+0

謝謝,我嘗試過,但我仍然在調試窗口中得到顯示異常,但不受此代碼抓到......我應如何獲取信息這一例外?還是慢,順便說一句。 –

+0

此外,這看起來像一個服務器?對不起,沒有指定,但我正在建立一個客戶端。 –

+1

我發佈了關於如何捕獲和查看您的異常的更新。如果有幫助,請給它一個+1。 – jp2code