資源簡介
本程序使用的是 TCP 協議實現的即時通信軟件,程序是基于 Java 語言開發的,主要用到的技術有:
Socket 編程
自定義協議
如果使用普通的方法來標記一條消息的結束,如換行符,那么程序就不易擴展,只能發送純文本消息,所以
需要自己定義一種消息的格式,并且我們還需要提供發送消息與解析消息的方法。
服務器端創建一個 ServerSocket,循環等待客戶端的連接,每當有客戶端連接,就獲取到客戶端的 Socket 對象,
并將該對象交付給一個服務器端線程處理,服務器端線程會不斷從 Socket 的輸入流中解析出消息類型、長度及消
息內容,然后根據類型執行不同的操作。 客戶端與服務器建立連接,同時開啟一個客戶端線程接收服務器端發送的
消息,客戶端登錄是向服務器發送一條登錄命令,客戶端向服務器發送一條消息首先需要包裝成定義的消息格式,
然后再發送給服務器。 不管是發送消息還是發送命令其實本質都是一條消息,向服務器發送的消息都必須按照定義
的格式來
Socket 編程
自定義協議
如果使用普通的方法來標記一條消息的結束,如換行符,那么程序就不易擴展,只能發送純文本消息,所以
需要自己定義一種消息的格式,并且我們還需要提供發送消息與解析消息的方法。
服務器端創建一個 ServerSocket,循環等待客戶端的連接,每當有客戶端連接,就獲取到客戶端的 Socket 對象,
并將該對象交付給一個服務器端線程處理,服務器端線程會不斷從 Socket 的輸入流中解析出消息類型、長度及消
息內容,然后根據類型執行不同的操作。 客戶端與服務器建立連接,同時開啟一個客戶端線程接收服務器端發送的
消息,客戶端登錄是向服務器發送一條登錄命令,客戶端向服務器發送一條消息首先需要包裝成定義的消息格式,
然后再發送給服務器。 不管是發送消息還是發送命令其實本質都是一條消息,向服務器發送的消息都必須按照定義
的格式來

代碼片段和文件信息
package?client;
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.net.Socket;
import?java.net.UnknownHostException;
import?myutil.Protocol;
/**
?*?封裝客戶端與服務器通信的細節
?*/
public?class?Client?{
//套接字
Socket?socket;
//輸出流
DataOutputStream?dos?=?null;
/**
?*?連接服務器并初始化輸出流
?*?開啟客戶端線程負責消息的接收
?*?@param?address?服務器IP地址
?*?@param?port?服務器端口號
?*/
public?void?conn(String?address?int?port)?{
try?{
socket?=?new?Socket(address?port);
dos?=?new?DataOutputStream(socket.getOutputStream());
new?ClientThread(socket).start();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
/**
?*?登錄
?*?@param?user?用戶昵稱
?*/
public?void?load(String?user)?{
Protocol.send(Protocol.TYPE_LOADuser.getBytes()?dos);
}
/**
?*?發送消息
?*?@param?msg?消息內容
?*/
public?void?sendMsg(String?msg)?{
Protocol.send(Protocol.TYPE_TEXT?msg.getBytes()?dos);
}
/**
?*?退出
?*/
public?void?logout(){
Protocol.send(Protocol.TYPE_LOGOUT?“logout“.getBytes()?dos);
}
/**
?*?關閉客戶端,釋放掉資源
?*/
public?void?close()?{
//?向服務器發送退出命令
Protocol.send(Protocol.TYPE_LOGOUT?new?String(“logout“).getBytes()?dos);
//?關閉資源
try?{
if?(dos?!=?null)
dos.close();
if?(socket?!=?null)
socket.close();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-30?18:26??chat\
?????文件?????????295??2018-06-29?20:01??chat\.classpath
?????文件?????????363??2018-06-29?20:01??chat\.project
?????目錄???????????0??2018-10-30?18:26??chat\.settings\
?????文件?????????587??2018-06-29?20:01??chat\.settings\org.eclipse.jdt.core.prefs
?????目錄???????????0??2018-10-30?18:26??chat\src\
?????目錄???????????0??2018-10-30?18:26??chat\src\Server\
?????文件?????????665??2018-06-29?20:01??chat\src\Server\Server.java
?????文件????????2597??2018-06-29?20:01??chat\src\Server\ServerThread.java
?????目錄???????????0??2018-10-30?18:26??chat\src\client\
?????文件????????1460??2018-06-29?20:01??chat\src\client\Client.java
?????文件????????1461??2018-06-29?20:01??chat\src\client\ClientThread.java
?????文件????????4691??2018-06-29?20:01??chat\src\client\View.java
?????目錄???????????0??2018-10-30?18:26??chat\src\myutil\
?????文件????????1361??2018-06-29?20:01??chat\src\myutil\Protocol.java
?????文件?????????755??2018-06-29?20:01??chat\src\myutil\Result.java
?????文件???????11263??2018-06-29?20:01??client.jar
?????文件????????5124??2018-06-29?20:01??server.jar
?????文件?????1586640??2018-10-31?18:32??基于JAVA的即時通信軟件.pdf
?????文件???????33432??2018-06-29?20:01??程序說明文檔.docx
- 上一篇:xutils-3.3 .36
- 下一篇:TOMCAT內存大小調整
評論
共有 條評論