一、通訊中包含的主要內容:
客戶端伺服器
連線伺服器:
socket cilent = new socket(ip位址,伺服器設定的埠號);
監聽伺服器端口:
serversocket ss = new serversocket(設定埠號);
接收客戶端的連線:
socket socket = ss.accept;
inputstream input = cilent.getinputstream;
read()方法讀取伺服器傳送過來的資訊。
outputstream output = socket.getoutoutstream;
write()方法往客戶端傳送資訊。
outputstream output = cilent.getoutoutstream;
write()方法往伺服器傳送資訊。
inputstream input = socket.getinputstream;
read()方法讀取客戶端傳送過來的資訊。
注意:1、伺服器和客戶端要分開設計,最好是各建乙個工程。
2、讀read和寫write都是通過位元組的形式完成的(自己還可重新定義讀和寫的方法)。
3、寫入和讀取的順序不要混淆。
二、主要設計思路:
1、首先是編寫乙個簡單的伺服器。
(1)、先建乙個帶有主函式的類myserver,在這個類中實現乙個myserver方法,該方法中用於建立監
聽埠的套接字serversocket物件,並接受客戶端socket的訪問,例如:
public void setserver(int port) catch (ioexception e)
}
再主函式中呼叫該方法,然後就可以通過(程式---執行---cmd---telnet ip位址 埠號)訪問這個簡單
伺服器,此時只可以訪問這個伺服器,還不可以與伺服器進行交流。
(2)、如果要進行交流,就要有輸入輸出流進行讀寫資訊
inputstream input = socket.getinputstream;
outputstream output = socket.getoutputstream;
需注意:讀和寫都是通過位元組的形式完成的。自己定義寫入和讀取的規則
(3)、如果要伺服器接受多個客戶端,就要把接受訪問的socket的物件放到乙個死迴圈中,這樣伺服器
就一直處於等待接受狀態。例如:
while(true)
(4)、然後新增乙個執行緒,把socket物件接收到的連線放到這個執行緒中處理,再新增乙個死迴圈,讓服
務器一直處於傳送和讀取資訊狀態。例如:
public serverthread(socket scoket)
public void run()
} catch (exception e)
}
2、編寫乙個客戶端。
乙個簡單的客戶端只要可以傳送和接受訊息,並在介面上顯示出來就可以了。設定乙個簡單的聊天
介面,介面上有兩個文字區(乙個用於往伺服器傳送訊息,乙個用於顯示從伺服器接收到的訊息)和一
個傳送按鈕,並且給按鈕新增事件***。
介面完成後,首先要把客戶端與伺服器建立連線,這就要建立socket物件,要傳送和接收到訊息
就要建立輸入輸出流物件,例如:
socket cilent = new socket(192.0.0.133(ip位址),8888(這裡要填寫伺服器設定的埠號));
輸入流 inputstream input = cilent.getinputstream;
輸出流 outputstream output = cilent.getoutputstream;
然後就可以獲取文字區中輸入的內容及按鈕物件,往伺服器傳送訊息(輸出流的write()方法)和接
受訊息(輸入流的read()方法)。例如:
//得到在第二個文字框中輸入的內容
string cmd = jtf1.gettext();
try catch (ioexception e1)
3、新增新的功能,完善伺服器和客戶端。
(1)、給客戶端新增登入介面。
首先設定登入介面,登入介面包含賬號輸入框和密碼輸入框,還有登入和註冊按鈕。客戶端
把socket物件以及輸入輸出流物件設定在登入介面的事件***類裡面,其它地方需要時,可以
通過構造方法或get方法把它們傳過去。在伺服器端把讀取的賬號和密碼驗證是否存在之前,自己
先定義一些賬號和密碼,並進行初始化存到集合框架中(例如:雜湊表),然後驗證,並把驗證
結果返還給客戶端,並作相應的處理。
在伺服器中驗證賬號和密碼:
//判斷賬號和密碼是否正確
if(password.equals(map.get(username))&&equser())else if(password.equals(map.get(username))&&!equser())else
(2)、給客戶端新增註冊功能。
首先設定註冊介面,登入介面包含賬號輸入框、密碼輸入框和密碼重新輸入框,還有確定和
取消按鈕。先通過構造方法把輸入輸出流物件傳過來,先驗證兩次輸入的密碼是否正確,若正
確,把賬號和密碼傳送給伺服器,驗證該賬號是否存在,若不存在,直接把賬號和密碼存到雜湊
表中或存到乙個檔案中,若存在,返還一條資訊給客戶端。
在伺服器中驗證註冊的賬號和密碼:
//讀取註冊的賬號
string suer = readline(input);
//讀取註冊的密碼
string spass = readline(input);
//初始化乙個布林型別的變數,用於標示註冊的使用者是否存在,true表示註冊的使用者不存在,false表示註冊的使用者存在
boolean flag = true;
setset = map.keyset(); //建立set物件,並獲取雜湊表中的使用者名稱集合,set中存的內容是無序的且不可重複的
iteratoriter = set.iterator(); // 建立迭代物件,
while(iter.hasnext())
}
if(flag == true)
(3)、客戶端與客戶端能夠實現群聊。
在伺服器端建立乙個陣列佇列(或其它集合框架),把每個接收到訪問的socket的物件或
socket物件的執行緒存到佇列中,傳送訊息時,遍歷佇列,往每個客戶傳送訊息。
群聊時直接呼叫**的方法:
/**
* 傳送一條訊息
*/public void sendmsg(string msg) catch (ioexception e) }
/*** **訊息
* @param msg
*/public void sendallmsg(string msg)
}
乙個簡單的PCIE驅動到裝置的通訊協議
本文主要介紹乙個簡單的單一裝置pcie驅動程式和裝置的通訊協議,從上到下大致分為三層 應用層 驅動層和裝置層。其中,應用層和驅動層通過系統匯流排 win32 api呼叫 實現通訊,驅動層和裝置層通過pci匯流排 位址空間對映 進行通訊。一 driver和device的資料互動方式 driver和de...
看了這,我也能設計乙個通訊協議
最近給 tkeyboard 增加了不少新功能,其中最有意義的部分是,通過藍芽和 wifi,配合 protobuf,在 mac 和 ios 之間建立了兩條便捷的資料交換通道,算是打好了未來產品開發的地基,網路通道建立好了,後續的想象空間也大。比如,現在可以將 iphone 上 safari 正在瀏覽的...
websocket實現乙個簡單的聊天室對話
npm install socket.io client socket是乙個高效能的伺服器框架,開發者只要實現一兩個介面,便可以開發出自己的網路應用,例如rpc服務 聊天室伺服器 手機遊戲伺服器等。koa 通過 node.js 實現了乙個十分具有表現力的 http 中介軟體框架,力求讓 web 應用...