
文章插圖
學(xué)習(xí)編程最重要的就是興趣引導(dǎo),所以在學(xué)習(xí)之前能夠看到一個項目成型是非常有必要的 。
QQ微信作為大家經(jīng)常使用的社交軟件,一定特別貼切實際 。
今天就帶大家去了解一下,一個簡單的QQ聊天工具其實并不復(fù)雜 。
首先把這個聊天的項目簡單的分為四步,也就是整體的框架(目錄) 。
Java項目——簡單的QQ聊天工具(目錄)一、聊天演示二、服務(wù)器端三、客戶端四、Util工具類聊天演示這個是我自己模擬的截圖,由于只有一臺電腦,所以只能運行多個窗口進(jìn)行演示(你也可以多臺電腦演示) 。
演示截圖
這里的服務(wù)器端是Server,客戶端有三個分別是111、222和333,當(dāng)我們正常聊天時是群聊狀態(tài),想要進(jìn)行私聊可以進(jìn)行@XXX:即可,該系統(tǒng)可以完成多臺電腦的聯(lián)機 。
服務(wù)器端下面給大家詳細(xì)的講解一下關(guān)于QQ群聊和私聊的具體思想:
首先這個程序用了TCP協(xié)議,也叫做三次握手協(xié)議 。為什么這樣講呢?
因為在這個TCP協(xié)議中分客戶端和服務(wù)器端,客戶端要想向服務(wù)器端發(fā)送消息,要先給服務(wù)器打個招呼,判斷服務(wù)器是否能正常工作 。
如果可以,服務(wù)器會給一個回復(fù),當(dāng)客戶端接到這個肯定的回復(fù)后才能向服務(wù)器發(fā)送消息,所以需要先啟動服務(wù)器端,其中,服務(wù)器端和客戶端之間的信息傳輸都是以流的方式進(jìn)行的,如何啟動服務(wù)器端呢?
這個是我寫的代碼,里面都有注釋:由于從JDK中復(fù)制過來的代碼格式會被平臺調(diào)整,所以這里照齊上可能不太好看 。
package com.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
* 該類實現(xiàn)的是服務(wù)器端,也只有啟動了服務(wù)器,客戶端才能進(jìn)行信息的交流
* @author 11852
*
*/
public class Server {
//這個list集合是用來存儲各個客戶端的,每當(dāng)有一個客戶端建立了連接,這里就會存儲起來
private static List<Channel> list = new ArrayList<Channel>();
public static void main(String[] args) throws IOException {
System.out.println(“—Server—“);
// 指定端口,使用ServerSocket創(chuàng)建服務(wù)器,此時創(chuàng)建了一個名字為server端口號為12345
的服務(wù)器
ServerSocket server = new ServerSocket(12345);
boolean flag = true;
while (flag) {
// 阻塞式等待連接accept,服務(wù)器調(diào)用accept方法,即是獲得一個客戶端的連接
//如果沒有客戶端連接,則該程序處于堵塞狀態(tài)
Socket client = server.accept();
System.out.println(“一個客戶端建立了連接”);
//客戶端與服務(wù)器建立了連接之后,獲取該客戶端的輸入流和輸出流對象
Channel channel = new Channel(client);
list.add(channel);// 用list容器管理所有的人員
//這里是實現(xiàn)多線程,即每個客戶端都可以進(jìn)行與服務(wù)器端的交流
new Thread(channel).start();
}
server.close();
}
// 一個客戶端代表一個Channel
static class Channel implements Runnable {
private DataInputStream dis;
private DataOutputStream dos;
private Socket client;
private boolean isRunning;
private String name;
//這是構(gòu)造方法
public Channel(Socket client) {
this.client = client;
try {
dis = new DataInputStream(client.getInputStream());
isRunning = true;
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- cad動態(tài)塊的創(chuàng)建完整步驟 cad動態(tài)塊怎么做
- 怎么申請開通注冊郵箱賬號? 如何創(chuàng)建自己的電子郵件
- 字里行間,傳遞希望!暴雨后救命文檔創(chuàng)建者是河南籍大學(xué)生 萬古神帝飛天魚
- 暴雨救命文檔創(chuàng)建者是河南籍大學(xué)生 萬古神帝飛天魚
- 電腦怎么創(chuàng)建圖片密碼? 圖片密碼怎么設(shè)置
- linux創(chuàng)建用戶命令代碼講解 linux創(chuàng)建用戶命令代碼
- 創(chuàng)建存儲過程語法 創(chuàng)建存儲過程的語句是什么
- 2021手機兼職項目 未成年手機兼職賺錢一單一結(jié)50元
- 2021手機兼職軟件推薦 手機上做兼職賺零花錢做什么
- 手把手教你注冊谷歌賬號 安卓手機怎么創(chuàng)建谷歌賬號
