C#應用視頻教程1.2 Socket通訊用戶端實現

來源:互聯網
上載者:User

標籤:ref   很多   提示   協議   images   red   發送   最大   robot   

接下來我們嘗試實現最簡單的Socket用戶端,為了確保只可能你的代碼有問題,伺服器要先用別人成熟的代碼測試(這也是編程的一個技巧,先不要用自己寫的用戶端測試自己寫的伺服器,這樣出了問題你也不知道誰有問題,也可能都有問題,而是一樣一樣來,拿不準的先用別人的),先開啟這個Socket伺服器

?

嘗試串連到伺服器,只要參照網上的做法,調用Socket的connect方法和disconnect方法即可(把指定的IP地址和連接埠按照要求轉成IPEndPoint類型),可以發現SocketTest軟體確實就不但的提示New Client和Client closed connection,這也是我們後面要學習的,做用戶端的時候如果串連成功了要提示,做伺服器如果有用戶端串連成功了也要提示。

?

如果為了更加嚴謹可以在轉換之前先判斷是否是合格的IP地址和連接埠,IP地址網上可以找到很多檢測的手段,每個XXX.XXX數值有限制就行了,連接埠我這裡填寫的1234,其實也可以填寫更大或者更小,具體最大值最小值沒有研究過,但是不要填一些已經預設被佔用的連接埠,比如80連接埠預設是http協議,21是預設的ftp連接埠,開啟它的軟體的Port可以看到常規的對TCP連接埠的定義,這些連接埠不要佔用

?

串連完了之後就是考慮給伺服器發訊息,發送資料也比較簡單,注意不能直接發送字串,而是要轉成byte數組(讀者可以去看相關的文字,為什麼要轉成byte數組,可能考慮不同的作業系統,軟體對文本的處理方式不同,所以需要弄成通用的byte位元組流),此外可以發現簡單的Send方法是不支援中文的,他接受到的東西是亂碼(這個問題我們以後再考慮)

?

發送完成之後就要考慮接受伺服器的資料。接收資料比發送麻煩的多,我們這裡示範了最簡單的接收方法(s.Recieve),使用者一旦點擊了接收的按鈕,則視窗都不能動了,這也是同步Socekt通訊的最大的特點(就是收到完畢之後才會接下去幹別的) 。

?

讀者還是想象成賓館的房間,如果用戶端沒有Recieve,伺服器就是往裡發資料了,發完了之後用戶端才Recieve會怎麼樣?測試可以發現如果是伺服器先往Socket扔東西,用戶端接收就會立即執行,當然s.Recieve方法一旦執行完畢,也就不阻塞了,視窗立即能動

?

通過上面兩步的測試,我們發現接收資料會導致程式卡死,那麼如何解決Receive方法導致的整個程式卡死的問題呢?(事實上根本不應該使用者點擊了接收才執行接收,而是隨時可以接收伺服器發過來的資料,如同我們可以隨時給伺服器發訊息一樣),最簡單的方法就是把會卡死的部分放到一個線程中去執行,下面我們只要串連成功,就會啟動線程並陷入死迴圈,線上程中Recieve的阻塞不會導致主程式的卡死

?

但是採集到資料之後如何更新到主介面的東西呢?我們如果線上程中去更新主介面label,textbox都是會報錯的,一旦伺服器點擊了發送按鈕,我們想要更新程式的介面文字框,標籤之類的會提示從不是建立控制項的線程訪問它

?

如果讀者上網查,在程式初始化的時候加上這一條"關閉跨線程訪問控制項檢測"是最簡單粗暴的解決辦法,但是實際上讀者如果做實際項目,有很多個線程用這種方式去更新介面的控制項,程式是不穩定的(你測試一個小時可能沒問題,你連續運行三天就不一定了)。我們下一節會結合事件和委託的方法一併處理這個問題。

?

?

更多教學視頻和資料下載,歡迎關注以下資訊:

我的優酷空間:

http://i.youku.com/acetaohai123

?

我的線上論壇:

http://csrobot.gz01.bdysite.com/

?

問題交流:

QQ:910358960

郵箱:[email protected]

?

?

?

?

?

C#應用視頻教程1.2 Socket通訊用戶端實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.