none
2008 vs 之 Socket connect 問題 RRS feed

  • 問題

  • 請問各位先進

    連接一個可能根本不存在之IPADDRESS

    On Error GoTo errH

    dim Mysocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Mysocket.Connect(IP, 502)

    上列程式碼 若是失敗.系統會回應一個Exception

    但總是20秒後.程式停留於此階段,像當機一樣

    是否可設定Socket connect失敗之反應時間較短.程式看起來不會像當機


    2011年5月11日 上午 01:39

解答

  • 直接用另一條執行緒去做Connect
    2011年5月11日 上午 02:47
  • 解決方式大概會有幾個狀況

    (1) 其實你可以在connect 之前先ping 對方的IP, 看是否會回應, 不過如果ICMP被關掉, 這招就沒用了.

    (2) 同阿尼所言, 用多執行緒的方式來寫 (一般我們用同步的Socket寫法, 多半是會搭配多執行緒, 避免讓UI被鎖死)

    (3) 另一種方式是採非同步連接 Socket.ConnectAsync 方法

    (4) 另外你可以參考這一篇以前的相關討論 http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/7138e868-6d5d-46ba-96c7-55f4e6d3d762


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月12日 下午 04:46
    版主

所有回覆

  • 直接用另一條執行緒去做Connect
    2011年5月11日 上午 02:47
  • 解決方式大概會有幾個狀況

    (1) 其實你可以在connect 之前先ping 對方的IP, 看是否會回應, 不過如果ICMP被關掉, 這招就沒用了.

    (2) 同阿尼所言, 用多執行緒的方式來寫 (一般我們用同步的Socket寫法, 多半是會搭配多執行緒, 避免讓UI被鎖死)

    (3) 另一種方式是採非同步連接 Socket.ConnectAsync 方法

    (4) 另外你可以參考這一篇以前的相關討論 http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/7138e868-6d5d-46ba-96c7-55f4e6d3d762


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年5月12日 下午 04:46
    版主