C# socket 局域网聊天程序的一点心得
生活随笔
收集整理的這篇文章主要介紹了
C# socket 局域网聊天程序的一点心得
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C# socket 局域網(wǎng)聊天程序的一點(diǎn)心得
(一)服務(wù)器與客戶端的關(guān)系
1、服務(wù)器開啟監(jiān)聽服務(wù)? ? ? 服務(wù)器使用特定的端口不停的監(jiān)聽來自客戶端的消息。(開啟一個(gè)新線程進(jìn)行監(jiān)聽)。
2、監(jiān)聽來自客戶端的登錄信息并進(jìn)行校驗(yàn);
? ? ? 客戶端登陸時(shí)會(huì)向服務(wù)器發(fā)送驗(yàn)證消息(用戶名、密碼),服務(wù)器接收到消息后查詢數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證。驗(yàn)證成功后,發(fā)送允許登錄信號(hào),驗(yàn)證失敗,發(fā)送不允許登錄信號(hào)。
3、定時(shí)檢查客戶端的連接。
? ? ? 監(jiān)聽來自各個(gè)客戶端發(fā)來的心跳包,服務(wù)端每隔特定時(shí)間檢測(cè)客戶端是否有信息發(fā)送。如有則在線,否則已下線。
4、廣播信息給客戶端。 ? ??
? ? ? 打包所有客戶端的信息(IP地址、端口等),每隔特定時(shí)間廣播轉(zhuǎn)發(fā)給每個(gè)上線的客戶端;
(二)客戶端與客戶端的關(guān)系
1、客戶端開啟監(jiān)聽服務(wù)? ? ? 客戶端使用特定的端口不停的監(jiān)聽來自其他客戶端的消息。(開啟一個(gè)新線程進(jìn)行監(jiān)聽)。
2、點(diǎn)對(duì)點(diǎn)傳輸數(shù)據(jù)。?
? ? ? 客戶端已從服務(wù)器獲知了各個(gè)在線客戶端的ip及端口號(hào)。這樣就可以與其他客戶端進(jìn)行連接。
(三)有關(guān)不同類型的文件?
? ? ? ? 做聊天程序。會(huì)發(fā)送不同類型的文件,如文本、文件、圖片等格式。這就需要我們做好協(xié)議。我們可以把要發(fā)送的信息進(jìn)行包裹。做一個(gè)標(biāo)記。要發(fā)送的文本信息前添加幾個(gè)字節(jié)或在后面添加幾個(gè)字節(jié)。用來標(biāo)記這是文本信息。在接收的時(shí)候我們獲取標(biāo)記信息,并還原源消息。通過標(biāo)記就可以知道。信息的類型。文件、圖片等也是如此。(四)有關(guān)跨線程
? ? ? ?做聊天程序會(huì)開啟多個(gè)線程,這就避免不了跨線程訪問,我們可以取消跨線程檢查機(jī)制?<span style="font-size:18px;">CheckForIllegalCrossThreadCalls = false;</span>?在這里不推薦使用。可能會(huì)引發(fā)其他問題。我們可以使用委托。例如我們想要在一個(gè)新線程中訪問界面線程的控件我們可以這樣實(shí)現(xiàn) TextBox1.Dispatcher.Invoke(new Action(() => { TextBox1.Text = "helloword"; }));實(shí)例:鏈接:http://pan.baidu.com/s/1qWl5jFu 密碼:6p4t
總結(jié)
以上是生活随笔為你收集整理的C# socket 局域网聊天程序的一点心得的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: socket 10106问题解决日记
- 下一篇: 【Git】git checkout