socket c/s分佈式編程
?
SOCKET:
Socket接口介于應(yīng)用程序與硬件之間。對Socket的理解可以簡化為:它是封裝了數(shù)據(jù)流(Stream)的從機器到機器的一條軟接線,通過這條軟接線,并借助于線兩端的收發(fā)程序,網(wǎng)絡(luò)上的機器間實現(xiàn)了信息的交流與互通。分離在軟線兩端的應(yīng)用程序(服務(wù)器端程序和客戶端程序)可以通過調(diào)用Socket接口來開發(fā)具有TCP/IP網(wǎng)絡(luò)功能的程序應(yīng)用。
作為客戶端,即要知道服務(wù)程序所在房間的房間號(IP地址),又要知道后門的位置(端口)。這樣才能正確地進入房間。
?
數(shù)據(jù)編發(fā):
軟線建立完成后,還必須有數(shù)據(jù)傳輸?shù)囊?guī)則,這就是服務(wù)端和客戶端商量著來的事情了。數(shù)據(jù)使用什么封裝,傳送時遵循什么規(guī)則(收發(fā)協(xié)議)、傳輸是否采用壓縮技術(shù)和加解密技術(shù)等。將數(shù)據(jù)封裝起來,可以讓程序的設(shè)計者像操作本地文件一樣來操作流動在網(wǎng)絡(luò)上的信息。不同的數(shù)據(jù)封裝方式將決定客戶端和服務(wù)器端數(shù)據(jù)的訪問方式。編發(fā)類型僅限于標(biāo)量(基本型別)和字符串對象。複雜對象需要我們考慮有關(guān)對象到字節(jié)的串行化以及字節(jié)流到對象的還原問題。
?
多線程
作為一種例程服務(wù),必須要考慮其同時服務(wù)于多用戶的問題。這個問題的解決可以通過線程技術(shù)來實現(xiàn),而且相當(dāng)簡單。基本思路是:在服務(wù)器內(nèi)產(chǎn)生單一的監(jiān)聽Socket,并循環(huán)調(diào)用accept()等待新的軟線連接。Accept()每返回一次,就會帶回與特定客戶有關(guān)的Socket,將該Socket的運作安排到一個獨立的線程中,這樣其服務(wù)就是針對特定客戶的了??紤]到多線程對共享資源訪問時的同步問題如果處理不當(dāng)就會造成線程的不安全,必須為臨界區(qū)設(shè)置線程鎖。
?
基于TCP的收發(fā)協(xié)議
??? 使用Socket編程,必須明確客戶端與服務(wù)器端的收發(fā)協(xié)議。以下是針對該實例定義的收發(fā)協(xié)議:
客戶端:發(fā)送報頭9999,發(fā)送用戶名(String),發(fā)送密碼(String)
服務(wù)端:接收報頭9999,接收用戶名和密碼,驗證登錄權(quán)限
??????? 是合法用戶:發(fā)送報頭9999,發(fā)送歡迎信息(String)
??????? 是非法用戶:發(fā)送報頭-1,發(fā)送警告信息(UTF)
客戶端:接收報頭9999,獲取歡迎信息(String)
轉(zhuǎn)載于:https://www.cnblogs.com/hnxxcxg/archive/2009/07/09/2940766.html
總結(jié)
以上是生活随笔為你收集整理的socket c/s分佈式編程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汪文君PowerMock实战视频
- 下一篇: [Simulink] 从S函数到模块代码