2010-05-30 55 views
1

我已經與我的手機我的電腦,並用這個,如何查找當前使用哪個串行端口?

string[] lPorts = System.IO.Ports.SerialPort.GetPortNames(); 

,結果是端口的名稱數組現在

"COM4" 
"COM3" 
"COM1" 
"COM7" 
"COM6" 

,如何找到哪個串行端口當前使用/我的手機連接到哪個端口在C#中?

+0

剛纔看到你要求鏈接,如果你看我的評論Filip-fku有一個可能有用的鏈接。 – 2010-05-30 12:03:29

+0

@ho是唯一的方法... – 2010-05-30 12:06:44

+0

我們是否得到了這個權利?我假設你想以編程方式訪問你的手機的串行端口。那是對的嗎?如果是這樣,那麼提供的鏈接應該讓你開始。在這種情況下,您只需要嘗試使用每個串行端口,就好像它是您手機所連接的那個一樣。如果有錯誤,那麼你的手機沒有連接到該端口.. – 2010-05-30 12:40:32

回答

4

顯然你需要知道用於通信的串行協議。只需發送一個已知的命令到每個端口並檢查預期的響應。沒有設備的端口會超時/拋出IOException。

或者如果您不想通過代碼來做到這一點,您可以使用超級終端或其他串行終端程序嘗試相同的操作。 (請注意我從內存中寫這個,不保證這會編譯/我有方法名稱100%正確,但它提供了一般的想法)。

foreach(string portname in SerialPort.GetPortNames()) 
{ 
    // Use your connection settings - own baud rate etc 
    SerialPort sp = new SerialPort(portname,4800, Parity.Odd, 8, StopBits.One); 
    try 
    { 
     sp.Open(); 
     sp.Write("Your known command to phone"); 
     Thread.Sleep(500); 
     string received = sp.ReadLine(); 

     if(received == "expected response") 
     { 
       Console.WriteLine("Phone connected to: " + portname); 
       break; 
     } 
    } 
    catch(Exception) 
    { 
     Console.WriteLine("Phone NOT connected to: " + portname); 
    } 
    finally 
    { 
     sp.Close(); 
    } 
} 
+0

@filip任何好的鏈接.. – 2010-05-30 11:55:58

+0

我認爲它應該拋出一個'TimeoutException'在TimeoutException的文檔頁面上 - http://msdn.microsoft.com/en-us/library/system.timeoutexception.aspx – 2010-05-30 12:02:31

+0

+1在這裏幫助我很好。 – 2013-04-02 00:42:19