none
非同步socket RRS feed

  • 問題

  • 關於範例https://msdn.microsoft.com/zh-tw/library/bbx2eya8(v=vs.110).aspx

    看得不太明白,想釐清一些觀念。

    1.BeginConnect、BeginSend方法,是不是就是以另一個執行緒來執行動作?

    2.callback方法內 程式碼多有 (Socket)ar.AsyncState 這個socket代表甚麼?

    3.callback方法,是不是代表著動作執行完成? 如果是的話那當動作一直未完成,通常都是以什麼方式來通知呢?

    4.callback方法中的EndConnect、EndSend, 結束的是那些被擱置的動作呢?

    5.ManualResetEvent 內文中的用法是不是只是為了暫停執行緒,方便callback的展示?

    2018年1月31日 上午 07:35

解答

  • 1) 是

    2) 轉型

    3) 完成才通知, 如果未完成也要收通知, 要看是否有提供Progress之類的事件, 以查詢工作的進度

    4) EndConnect結束BeginConnect, EndSend結束BeginSend

    5) 不是, 是為了控制不要重覆執行Connect, Send, ...

    • 已標示為解答 StuBoo 2018年2月1日 上午 01:40
    2018年1月31日 上午 09:40
  • 1) 代表傳給BeginSend的Object參數(最後一個參數)

    2) 如果Socket沒有提供Progress之類的事件, 大概只有自已寫Socket類別或繼承Socket類別才能加入事件了

    3) 是的, 如果沒有發生錯誤的話

    • 已標示為解答 StuBoo 2018年2月1日 上午 01:40
    2018年2月1日 上午 12:37

所有回覆

  • 1) 是

    2) 轉型

    3) 完成才通知, 如果未完成也要收通知, 要看是否有提供Progress之類的事件, 以查詢工作的進度

    4) EndConnect結束BeginConnect, EndSend結束BeginSend

    5) 不是, 是為了控制不要重覆執行Connect, Send, ...

    • 已標示為解答 StuBoo 2018年2月1日 上午 01:40
    2018年1月31日 上午 09:40
  • 1) 是

    2) 轉型

    3) 完成才通知, 如果未完成也要收通知, 要看是否有提供Progress之類的事件, 以查詢工作的進度

    4) EndConnect結束BeginConnect, EndSend結束BeginSend

    5) 不是, 是為了控制不要重覆執行Connect, Send, ...

    2.理解是轉型為socket,只是 是代表哪個socket呢?  client.BeginSend ,那(Socket)ar.AsyncState他代表的是client嗎?

    3.所以callback是完成才發生,未完成並不會觸發任何東西,得自行寫個計時的Thread觸發事件這樣嗎?

    4.也就是當動作完成,執行callback方法時,如果不執行EndSend,BeginSend所產生的執行緒會一直運行嗎?

    2018年1月31日 上午 10:07
  • 1) 代表傳給BeginSend的Object參數(最後一個參數)

    2) 如果Socket沒有提供Progress之類的事件, 大概只有自已寫Socket類別或繼承Socket類別才能加入事件了

    3) 是的, 如果沒有發生錯誤的話

    • 已標示為解答 StuBoo 2018年2月1日 上午 01:40
    2018年2月1日 上午 12:37
  • 1) 代表傳給BeginSend的Object參數(最後一個參數)

    2) 如果Socket沒有提供Progress之類的事件, 大概只有自已寫Socket類別或繼承Socket類別才能加入事件了

    3) 是的, 如果沒有發生錯誤的話

    另外想請問如果client連到server端,後續server端斷線的話 client該如何得知連線中斷呢?
    只能自行發送訊息得到已斷開連接的catch嗎?

    並且斷線後 如果我想要自動連線,以一個執行緒重複嘗試Connect會發生什麼異常嗎?
    即是 如果我重複執行socket.beginconnect 並且可能會在callback還沒回覆時嘗試第二次beginconnect。

    2018年2月1日 上午 03:01
  • 1) 您可以看一下這篇討論的做法:

    Instantly detect client disconnection from server socket

    2) 應該沒有問題, 您提供的範例程式有利用ManualResetEvent控制不會嘗試第二次beginconnect

    2018年2月1日 下午 01:07
  • 1) 您可以看一下這篇討論的做法:

    Instantly detect client disconnection from server socket

    2) 應該沒有問題, 您提供的範例程式有利用ManualResetEvent控制不會嘗試第二次beginconnect

    1.遇到一個狀況 當Server端斷線後 我client 發送訊息時卻沒有發生catch,需要數十秒後的發送才會跳catch
    2018年2月2日 上午 09:28
  • 感覺上有點像是連線逾時後才被程式Catch到, 如果是逾時造成的, 應是正常的反應
    2018年2月5日 上午 12:17