導航:首頁 > 編程語言 > java聊天室項目系統需求說明書

java聊天室項目系統需求說明書

發布時間:2025-03-11 00:17:48

① 速求用java語言寫聊天室的源代碼

【.java 客戶端Java源代碼】

import java.net.*;
import java.io.*;
public class ClientSocketDemo
{
//聲明客戶端Socket對象socket
Socket socket = null;

//聲明客戶器端數據輸入輸出流
DataInputStream in;
DataOutputStream out;

//聲明字元串數組對象response,用於存儲從伺服器接收到的信息
String response[];

//執行過程中,沒有參數時的構造方法,本地伺服器在本地,取默認埠10745
public ClientSocketDemo()
{
try
{
//創建客戶端socket,伺服器地址取本地,埠號為10745
socket = new Socket("localhost",10745);

//創建客戶端數據輸入輸出流,用於對伺服器端發送或接收數據
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

//獲取客戶端地址及埠號
String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

//向伺服器發送數據
out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

//從伺服器接收數據
response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

//執行過程中,有一個參數時的構造方法,參數指定伺服器地址,取默認埠10745
public ClientSocketDemo(String hostname)
{
try
{
//創建客戶端socket,hostname參數指定伺服器地址,埠號為10745
socket = new Socket(hostname,10745);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

//執行過程中,有兩個個參數時的構造方法,第一個參數hostname指定伺服器地址
//第一個參數serverPort指定伺服器埠號
public ClientSocketDemo(String hostname,String serverPort)
{
try
{
socket = new Socket(hostname,Integer.parseInt(serverPort));
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

String ip = String.valueOf(socket.getLocalAddress());
String port = String.valueOf(socket.getLocalPort());

out.writeUTF("Hello Server.This connection is from client.");
out.writeUTF(ip);
out.writeUTF(port);

response = new String[3];
for (int i = 0; i < response.length; i++)
{
response[i] = in.readUTF();
System.out.println(response[i]);
}
}
catch(UnknownHostException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}

public static void main(String[] args)
{
String comd[] = args;
if(comd.length == 0)
{
System.out.println("Use localhost(127.0.0.1) and default port");
ClientSocketDemo demo = new ClientSocketDemo();
}
else if(comd.length == 1)
{
System.out.println("Use default port");
ClientSocketDemo demo = new ClientSocketDemo(args[0]);
}
else if(comd.length == 2)
{
System.out.println("Hostname and port are named by user");
ClientSocketDemo demo = new ClientSocketDemo(args[0],args[1]);
}
else System.out.println("ERROR");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

【ServerSocketDemo.java 伺服器端Java源代碼】

import java.net.*;
import java.io.*;
public class ServerSocketDemo
{
//聲明ServerSocket類對象
ServerSocket serverSocket;

//聲明並初始化伺服器端監聽埠號常量
public static final int PORT = 10745;

//聲明伺服器端數據輸入輸出流
DataInputStream in;
DataOutputStream out;

//聲明InetAddress類對象ip,用於獲取伺服器地址及埠號等信息
InetAddress ip = null;

//聲明字元串數組對象request,用於存儲從客戶端發送來的信息
String request[];

public ServerSocketDemo()
{
request = new String[3]; //初始化字元串數組
try
{
//獲取本地伺服器地址信息
ip = InetAddress.getLocalHost();

//以PORT為服務埠號,創建serverSocket對象以監聽該埠上的連接
serverSocket = new ServerSocket(PORT);

//創建Socket類的對象socket,用於保存連接到伺服器的客戶端socket對象
Socket socket = serverSocket.accept();
System.out.println("This is server:"+String.valueOf(ip)+PORT);

//創建伺服器端數據輸入輸出流,用於對客戶端接收或發送數據
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());

//接收客戶端發送來的數據信息,並顯示
request[0] = in.readUTF();
request[1] = in.readUTF();
request[2] = in.readUTF();
System.out.println("Received messages form client is:");
System.out.println(request[0]);
System.out.println(request[1]);
System.out.println(request[2]);

//向客戶端發送數據
out.writeUTF("Hello client!");
out.writeUTF("Your ip is:"+request[1]);
out.writeUTF("Your port is:"+request[2]);
}
catch(IOException e){e.printStackTrace();}
}
public static void main(String[] args)
{
ServerSocketDemo demo = new ServerSocketDemo();
}
}

② 學習本月JAVA內容後有什麼感受

轉眼間在從大一踏進學校的校門到現在剛剛好兩年了,在這兩年裡面,有學到了不少東西,包括怎麼去獨立生活,怎麼去與人溝通,等等,當然最重要的還是學到了自己想要的專業知識。
大一的時候主要是學習計算機導論和C語言,對於急於想看到效果的我,C語言學起來就比較枯燥,因為C語言編寫出來的程序主要還是在命令行的操作,我很想開發出windows界面的軟體出來,但是沒有辦法,C語言是基礎,沒有這個基礎就往高處想,恐怕夢想不會那麼容易實現。所以我就認真的把C語言的基礎打好,先掌握好裡面的語法,程序控制邏輯和一些基本的演算法,說真的,盡管是比較枯燥,但是一旦陷入了編程中,自然就會發現其中的快樂。

大一第二學期的時候開始接觸NIIT的課程,平時雖然一點作業都沒有,但是我上課的時候不是那麼認真聽課的人,所以課後總是要花時間來看看和理解老師上課的例子,在這個學期中,我們主要學習了C++和Java,都是剛剛開始接觸到面向對象的語言中來,由於對一些面向對象的特性不熟悉,畢竟是剛開始接觸這方面的語言,所以學起來就有點吃力,再加上平時實踐的時間比較少。

終於到了學期的期末,學期期末的項目是使用Java語言開發一個網路的聊天室,在我還沒有開發之前一聽到這個項目,我做夢都沒有想到我可以編寫出一個聊天室出來,但是既然是課程提出來的項目,就一定有它的理由,我也相信最後一定也可以完成它。功夫不負有心人,經過接近一個月的研究,我總於完成了我來到學校的第一件作品。在這個月中,我不斷得查閱資料,詢問老師,平時和同學多交流,終於在最後的評審中,我獲得了全班第二的好成績。通過這個學期的開發中,我幾乎把整個學期學到的知識都用到了我的聊天室裡面,所以在實踐中也等於復習了這個學期所學的內容,而且我發現這樣的實踐,比我在平時課後看書,看資料所學到的還多。

大二的第一學期,進入了資料庫和高級Java的學習,說真的,在學資料庫的那段時期是最煩的,因為每天就學了一大堆SQL的語言,非常的枯燥,都是關於怎麼去查找數據表格裡面的內容,那是時期,因為課堂上聽課了之後覺得都是比較簡單的,所以課後很少去動手。到了後來項目開發中,我才發現資料庫的重要性,整個系統的信息都是存儲在資料庫裡面的,所有的在程序中對數據的操作都是等同於對數據的增刪改查詢操作。

在期末的項目中,根據項目所要求的內容,我不斷翻看以前沒有掌握好的資料庫知識,感覺如果我前面有認真學習的話,到了後面開發項目的時候就不會那麼吃力了。對此,我總結出,如果在前面學資料庫的時候不要單純學習SQL的語言,把資料庫和程序結合起來,如果老師的講課的過程中可以說清楚資料庫怎麼綁定到程序中去使用的話,那麼我想對於我來說我會更加有興趣去學好資料庫,因為只要在程序開發中才可以去體驗資料庫的魅力和重大的作用。

在學期末的J2EE開發電子商務網站中,我學到了很多關於怎麼製作動態網頁的一些必要元素的基本的原理,體會到軟體設計在網站開發中的重要性。

轉眼間來到了大二的第二個學期,可以說在這個學期中,是我最有感觸,學到最多知識,達到質的飛躍的一個重要學期。有了前面幾個學期的學習基礎,我對面向對象語言已經基本掌握清楚,運用起來也覺得沒有什麼特別困難,基本已經入門了,這個學期主要是進入了.net的學習。

好的開發工具是保證效率的一個重要因素,Microsoft Visual Studio .NET 2003就是這樣的一個開發工具,令我剛剛一接觸就深深得愛上了它,它的易學易用令我對編程的興趣倍增,以前學習Java之所以見效不大是因為沒有好的開發工具和環境,總是在環境配置中浪費大量的時間,而真正的涉及到編程很少,所以這也是我以前為什麼學起來沒有那麼有興趣的原因。

我覺得學編程就應該學習它的思想,編寫代碼就應該盡量避免寫出與邏輯無關的代碼,比如界面代碼可以讓機器去自動生成不必浪費時間手動去編寫,所以好的開發工具可以幫助我們做到這一點,只編程邏輯代碼,很多代碼都可以讓機器去自動生成。在.net就可以快速地開發既有漂亮界面也有強大功能的程序。有了這么好的開發工具,所以令我頓時感悟,有種相見恨晚的感覺。

有了好的開發工具後接下來要做什麼呢,當我們為之興奮的時候,當然是很有慾望去做出某某自己很想做的東西,因為你一拿到好的開發工具,就會整天的陷入開發狀態,對其愛不釋手,一開始我是試著開發一個Flash播放器,感覺編寫起來不是編寫起來不是那麼難,因為前面已經有學習Java的經驗了,初次學習.net的時候選擇編寫Flash播放器也是有理由的,一方面是程序比較簡單,另一方面的涉及到的控制項和界面比較多,所以一開始接觸這樣的語言就首先學習怎麼去調用.net平台上提供的控制項,只要掌握好這些控制項,以後編寫windows界面的控制項就簡單很多了。

經過幾天的時間,終於把Flash播放器做出來了,以後想Flash影集的時候都用自己開發的播放器進行播放,感覺別有一翻滋味,因為這就是為自己量身定做的,這就使我再一次感覺到開發的樂趣。

每年的11月份都有一個高校杯的軟體設計大賽,這時間正到了5月,我們屈指一算,離比賽的時間還有6個月的時間,這段時間我正處在開發的興奮期,所以對這個軟體設計比賽就感興趣起來,第一是可以知道自己的編程程度和其他人的距離,第二是可以利用這個一個項目實踐來鍛煉自己的開發技能,第三是可以鍛煉團隊的合作。以前幾乎都是自己開發的軟體,很少和其他人合作,所以就令我想到這種開發模式將來帶到工作會另自己處於不利的地位,現在不是都講究團隊的合作么。

經過思考後,我找來另外的兩個志同道合的同學,利用五一放假的時間想好主題,還有進行需求分析,最後定下來「多媒體日記本」這一項目。定好題目後我們就進行了分工,一個人負責資料庫方面,一個人負責界面的美化和界面的布局,另外一個負責功能的實現,分好工後我們立刻就展開了工作,在合作的過程中,我們學到了許多課本上沒講的或者只是粗略帶過的知識,有些特別的技術難點還要到網上去搜索,查閱有關的資料,在語言方面我們幾乎把.net裡面的基本框架和特性都用上了,這樣對於我們學習就達到了事半功倍的效果,邊學邊做學到的知識可以很快吸收,又可以很快得運用的實際中去,這是我通過這個項目感觸最深的。很快就到了期末,學校舉行「IT精英杯」軟體大賽,我們小組終於不負眾望,拿到了一等獎的好成績。

經過這次我比賽我總結出心得,首先比賽的題目要定好,一方面是開發的軟體要有實用性和市場前景,另一方面還要在實用性上加上點創新,給人耳目一新的感覺,我覺得只要先抓住好這兩點,做出來的軟體才會給人留下好的印象。

利用暑假的時間,我又參加系裡面組織的軟體工程培訓,又一次在開發項目中學到了許多許多看書只能朦朧懂的知識。

轉眼間大三第一個學期就開學了,回顧這兩年來學習軟體開發的經歷,寫了這樣的一遍心得,一方面算是對自己的總結,另一方面也可以拿出來給大家參考和交流。最後我還是要再歸納一次,總結出如何才可以比較容易地進入學習狀態達到快速開發的目的。

1. 打好基礎,掌握好C語言C++基礎的語言,對學習數據結構和演算法有很大的幫助。

2. 面向對象是高級也是最流行的語言,所有的面向對象語言幾乎都是通用的,結構和特性都差不多,只要掌握和歸納好它們的一些共同的特性,哪怕將來轉向其他的語言都是輕而易舉,得心應手,達到融會貫通的效果。

3. 好的開發工具是你提高開發效率,提高編程興趣的前提,學習語言的過程中還應該研究怎麼利用開發工具有效地提高開發的效率。

4. 善於總結,在開發過程中我們可以總結出許許多多規律性的東西,這些規律一方面可以讓我們避免在以後的開發中犯同樣的錯誤,另一方面對我們掌握其他的規律都是有所幫助的,規律都是交叉在一起的。跟著規律走,實事求是。

5. 項目開發是最好的學習方法,這一點是我最有感觸的,軟體開發是實踐性很強的活動,但靠理論知識學起來比較吃力,而且枯燥無味,學習種理論學習和開發實踐的比例應該是1:2,而且是交叉進行。這樣才可以比較快的掌握一個知識點。

6. 團隊合作,現在的項目幾乎很少一個人去完成,頻繁的溝通和密切的配合是成功的必要條件。

③ 求ASP網路聊天室 畢業論文

----經 常 在Internet上 沖 浪 的 網 友 恐 怕 很 少 有 人 沒 有 去 過 聊 天 室 神 侃 胡 吹 過。 你 只 要 稍 微 留 意 一 下 就 會 發 現 這 些 聊 天 室 大 多 是 用CGI程 序 或 者 用JAVA開 發 的Applet維 護 的。 開 發 過 這 類CGI或Applet的 程 序 員 都 知 道, 這 種 開 發 工 作 是 費 時 費 力 的。 那 么 有 沒 有 一 種 更 簡 單、 省 力 的 開 發 方 式 呢 ? 答 案 是 肯 定 的。 筆 者 利 用ASP很 快 就 開 發 了 一 個 聊 天 室, 該 聊 天 室 不 光 速 度 快, 維 護 也 特 方 便。 在 這 里 筆 者 想 把 開 發 過 程 中 的 技 術、 技 巧 和 心 得 介 紹 給 大 家。

<p style=line-height: 150%>----關 於ASP在《 計 算 機 世 界 報》 上 有 很 多 文 章 都 有 介 紹, 這 里 不 再 贅 述。 筆 者 工 作 的 單 位 里 有 一 個 由Windows NT4.0組 織 的LAN。NT服 務 器 上 安 裝 了IIS3.0, 設 置 了 若 干 各WEB站 點, 其 中 一 個 取 名 為fyb.cam.gov.cn。 本 單 位 的WEB站 點 並 沒 有 接 入Internet, 由 於 有 聊 天 室 卻 也 吸 引 了 不 少 本 單 位 的 員 工。 如 果 您 的 工 作 環 境 與 我 們 的 相 同, 不 妨 也 在 自 己 的LAN里 面 如 法 炮 制 一 個 聊 天 室。

<p style=line-height: 150%>一、 聊 天 室 的 規 劃:
---- 1、 談 話 內 容 儲 存 方 式 的 選 擇: 在 客 戶 機 上 顯 示 即 時 談 話 的 內 容 應 以 什 么 方 式 儲 存 在 服 務 器 呢 ?ASP有 兩 種 選 擇, 一 種 是 以 文 本 文 件 方 式, 一 種 是 以 數 據 庫 方 式。 但 筆 者 感 覺ASP對 文 本 文 件 操 作 的 指 令 遠 不 如ADO(ActiveDataObject)提 供 的 對 數 據 庫 操 作 的 指 令 多。 所 以 利 用ADO,ASP能 對 數 據 庫 靈 活 地 操 作, 比 如 插 入、 刪 除、 更 新、 查 詢 等 等。 筆 者 選 擇Access數 據 庫 來 儲 存 談 話 的 內 容。 該 數 據 庫 內 容 只 保 留 一 天( 可 根 據LAN的 實 際 情 況 確 定 時 間 長 短) 的 談 話 內 容。

<p style=line-height: 150%>---- 2、 聊 天 室 界 面 的 設 計: 為 了 客 戶 能 夠 方 便 地 瀏 覽 站 點 的 內 容, 又 能 盡 可 能 地 顯 示 聊 天 室 的 內 容, 筆 者 在 一 幅 主 頁 里 設 計 了 三 幀。 左 邊 一 幀 顯 示 的 是 站 點 的Index。 右 邊 一 幀 又 分 成 上 下 兩 幀。 上 幀 佔70%, 用 來 顯 示 當 前 聊 天 室 的 內 容; 下 幀 佔30%, 用 來 提 供 一 個 文 本 輸 入 框 和 供 用 戶 反 饋 的 按 鈕

<p style=line-height: 150%>---- 3、 進 入 聊 天 室 的 步 驟: 象 大 多 數 聊 天 室 一 樣, 首 先 應 該 提 供 給 用 戶 一 個 登 錄 界 面, 由 用 戶 輸 入 自 己 的 名 字 或 別 名 和 自 己 隨 意 給 定 的 密 碼。 如 果 輸 入 的 用 戶 名 與 在 線 的 用 戶 名 相 同, 則 提 示 用 戶 重 新 選 擇 用 戶 名 或 重 新 輸 入 密 碼, 以 保 證 在 線 的 所 有 用 戶 名 都 是 唯 一 的。 登 陸 成 功 後 進 入 聊 天 室, 內 容 顯 示 幀 顯 示「歡 迎 加 入」的 歡 迎 信 息。 用 戶 就 可 以 在 文 本 輸 入 區 內 輸 入 談 話 內 容 了。

<p style=line-height: 150%>二、 設 計 過 程 和 開 發 技 巧:
---- 1、 設 計ODBC系 統 數 據 源: 如 前 所 述, 本 開 發 采 用ASP對ADO進 行 操 作, 因 此 必 須 先 對 數 據 源 進 行 設 置。 在NT服 務 器 的 控 制 面 板 里 雙 擊ODBC圖 標, 在 系 統DSN頁 添 加 系 統DSN, 選 擇Microsoft Access Driver,Data Source Name為『fybchat』, Database選 擇Chat目 錄 下 的chat.mdb.該 數 據 庫 包 括 下 面 幾 個 字 段:name, content,password,chattime,chatdate,分 別 以 來 存 儲 姓 名、 談 話 內 容、 密 碼、 談 話 時 間 和 談 話 日 期。

<p style=line-height: 150%>---- 2、 登 錄 界 面 設 計: 登 錄 界 面 為 一html頁, 包 含 一 些 警 告 信 息 和 一 個Form。 該Form以 來 獲 取 用 戶 名 和 密 碼, 如 下 所 示:

<p style=line-height: 150%><formmethod="post"action="receivedata.asp" >
姓 名:<inputtype="text"name="usname" >
密 碼:<inputtype="password"name="uspassword" >
< /center >< br >< br >
< center ><inputtype="submit"value="進 入" >
<inputtype="reset"value="清 除" >< /center >
<inputtype="hidden"name="content"value="" >
< /form >
----通 過 提 交 按 鈕 來 激 發receivedata.asp。 該ASP文 件 主 要 來 保 證 在 聊 天 室 里 沒 有 兩 個 用 戶 是 同 名 的。 用 戶 提 交 信 息 後, 該 文 件 打 開chat.mdb檢 查 是 否 已 經 有 該 用 戶 名, 如 果 有 但 密 碼 不 對 就 提 醒 用 戶 重 新 輸 入 密 碼, 如 果 沒 有 那 么 用 戶 就 順 利 進 入 了 聊 天 室。 進 入 聊 天 室 界 面 的 功 能 由 下 列 語 句 完 成:

<p style=line-height: 150%><FRAMESETROWS="70%,30%" >
<FRAMESRC="forum.asp"NAME="main"
MARGINWIDTH="1"MARGINHEIGHT="1" Noresize >
<FRAMESRC="frft.asp?kname=
< % =name% >" NAME="footnotes"MARGINWIDTH="1"
MARGINHEIGHT="1" Noresize >
< /FRAMESET >
----注 意 這 里 有 一 個 技 巧, 通 過 參 數kname將 用 戶 的 姓 名 隱 藏 在 客 戶 的 瀏 覽 器 里 面 了, 這 樣 一 來, 用 戶 每 次 提 交 談 話 內 容 的 同 時 也 把 他 的 姓 名 提 交 了。

<p style=line-height: 150%>---- 3、 文 本 輸 入 區 的 設 計: 文 本 輸 入 區 是 由frft.asp產 生 的。 如 上 所 述, 用 戶 每 次 提 交 談 話 內 容 的 同 時 也 把 他 的 姓 名 提 交 了, 用 戶 提 交 談 話 內 容 的 動 作 是 激 活forum.asp。forum.asp的 作 用 是 刷 新 聊 天 室 的 內 容。Frft.asp內 容 如 下:

<p style=line-height: 150%><!DOCTYPE HTML PUBLIC "
-//IETF//DTDHTML//EN" >
< html >
< head >
<metahttp-equiv="Content-Type"
content="text/html;charset=gb_2312-80" >
<metaname="GENERATOR"
content="Microsoft FrontPage 2.0" >
< title >< /title >
< /head >
< body >
<%kname=request.QueryString("kname")% >
<basetarget="main" >
<formname="fm1" method="POST"action="forum.asp" >
<palign="center" ><inputtype="text"size="90"
name="content" >< /p >
<palign="center" ><inputtype="button"name="B1"
value="提 交/刷 新" ><inputtype="reset"
name="B2" value="重 寫" >< /p >
<inputtype="hidden"name="kname"
value=<%=kname% > >
< /form >
<SCRIPTLANGUAGE="VBScript" >
< !--

<p style=line-height: 150%>Sub IeTimer1_Timer()
if fm1.content.value="" then
fm1.content.value=""
fm1.submit
else
end if
end sub

<p style=line-height: 150%>sub b1_onclick()
fm1.submit
fm1.content.value=""
end sub
-- >
< /SCRIPT >
<OBJECTID="IeTimer1" WIDTH=39 HEIGHT=39
CLASSID="CLSID:59CCB4A0-727D-
11CF-AC36-00AA00A47DD2"
CODEBASE="http://208.208.208.201/asp/ietimer.ocx" >
< PARAM NAME="_ExtentX"VALUE="1005" >
< PARAMNAME="_ExtentY"VALUE="1005" >
< PARAM NAME="Interval"VALUE="7000" >
< /OBJECT >

<p style=line-height: 150%>< /body >
< /html >
----這 時 又 出 現 了 一 個 問 題, 用 戶 必 須 不 停 提 交 才 能 看 到 最 新 的 聊 天 室 內 容, 這 顯 然 給 用 戶 帶 來 了 不 便。 於 是 考 慮 用 一 個timer的ActiveX控 件 來 控 制 聊 天 室 的 內 容 豈 不 更 好 ? 於 是 選 用 了Ietimer, 如 上< object > … …< /object >所 引 用, 每 隔7秒 鍾 聊 天 室 內 容 自 動 更 新 一 次。 這 樣 即 使 用 戶 不 想 參 加 聊 天 也 可 以 坐 在 機 器 邊 看 別 人 聊 天 了。

<p style=line-height: 150%>三、 總 結
----由 上 述 開 發 過 程 我 們 可 以 知 道, 利 用ASP程 序 可 以 很 靈 活 地 傳 遞 參 數, 並 且 可 以 很 靈 活 地 將 程 序 流 程 分 割 成 幾 個 單 獨 的ASP程 序, 非 常 利 於 程 序 的 調 試, 對ActiveX控 件 的 支 持 和 對DAO的 強 大 操 作 能 力 使 得 利 用ASP能 夠 開 發 功 能 非 常 強 大 的 程 序。

④ 為java聊天室代碼加詳細注釋,並說明設計思路。好的加100分。

import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;//引入包。

public class ChatClient {
public static void main(String[] args) {
ChatClient cc = new ChatClient();
cc.receive();
}

JTextField jtf; // 文本條
JTextArea jta; //文本域。
Socket s; //客戶端
PrintWriter out; //輸出流
BufferedReader in; //輸入流

public ChatClient() {
JFrame frame = new JFrame("ChatClient");//窗口
frame.setSize(400, 300); //大小
jta = new JTextArea(); //文本域
jta.setEditable(false); //不可編輯
jtf = new JTextField();//文件
jtf.addActionListener(new ActionListener() { //添加監聽。

public void actionPerformed(ActionEvent arg0) {
send(); //調用send()方法
}

});
frame.getContentPane().add(new jscrollPane(jta)); //添加滾動條
frame.getContentPane().add(jtf, "South"); //添加文本條
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關閉窗口。
frame.setVisible(true); //可顯示的。

try {
s = new Socket("127.0.0.1", 9000); //連接服務端 socket("主機名",埠號);
in = new BufferedReader(new InputStreamReader(s.getInputStream())); //建立輸入流
out = new PrintWriter(s.getOutputStream());//輸出流
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void receive() { //接受服務端發來別的客戶端的信息。
while (true) {
try {
String text = in.readLine(); //讀一行
this.jta.append(text + "\n"); //jta 添加上讀入的。
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
}
}

public void send() { //發送消息
String text = this.jtf.getText(); //得到你輸入的消息
this.jtf.setText(""); //在文本域中顯示你輸入的消息。
out.println(text); //列印出。
out.flush(); //清空
}
}

Server端

import java.net.*;
import java.io.*;
import java.util.*;//引入包

public class ChatServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(9000); //建立服務端,埠號為9000
List list = new ArrayList(); //創建個List集合。
while (true) {
Socket s = ss.accept(); //等待客戶端的請求。
list.add(s); //把每一個client都add到集合中去。
Thread t = new ServerThread(s, list); //線程。
t.start(); //啟動。
}
}
}

class ServerThread extends Thread {
Socket s;
List list;
BufferedReader in;
PrintWriter out;

public ServerThread(Socket s, List list) { //構造。傳入socket和list。
this.s = s;
this.list = list;
try {
in = new BufferedReader(new InputStreamReader(s.getInputStream())); //輸入流
out = new PrintWriter(s.getOutputStream()); //輸出流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void run() { //必須實現其run()方法。
while (true) {
try {
String str = in.readLine(); //得到client端的message。
if (str == null) //如果沒有消息就返回。
return;
Iterator it = list.iterator(); //遍歷list。
while (it.hasNext()) { //如果list有下一個
Socket socket = (Socket) (it.next()); //因為list中都是存的socket
PrintWriter o = new PrintWriter(socket.getOutputStream()); //輸出流
o.println(str); //輸出
o.flush(); //清空
}
} catch (IOException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
return;
}
}
}
}

⑤ 如何用java做一個聊天小程序 要求使用圖形用戶界面,可以實現一個聊天室中多人聊天,也可以兩人私聊,

給你一個簡單的實現吧,注意一定要先運行MyServer.java

//MyCilent.java
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyClient extends JFrame implements ActionListener{
JTextField tf;
JTextArea tx;
JButton bt;
PrintWriter out;

public MyClient(){

tf=new JTextField(20);
tx=new JTextArea();
tx.setLineWrap(true);
tx.setWrapStyleWord(true);
JPanel pan=new JPanel();
JScrollPane jsp=new JScrollPane(tx);
add(jsp,"Center");
bt=new JButton("SEND");
bt.addActionListener(this);
pan.add(tf);
pan.add(bt);
add(pan,"South");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

setTitle("THE CLIENT");
setSize(400,300);
setVisible(true);

try{
Socket socket=new Socket("127.0.0.1",1680);

out=new PrintWriter(socket.getOutputStream(),true);
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader sin=new BufferedReader(in);

String s;
while(true){
s=sin.readLine();
tx.append("#Server Said#: "+s+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bt){
tx.append("@Client Said@: "+tf.getText()+"\n");
out.println(tf.getText());
tf.setText("");
}
}

public static void main(String[] args){
MyClient mct = new MyClient();
}
}

//MyServer.java

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyServer extends JFrame implements ActionListener{
JTextField tf;
JTextArea tx;
JButton bt;
JScrollPane jsp;
JPanel pan;
PrintWriter out;

public MyServer(){
tx=new JTextArea();
tx.setLineWrap(true);
tx.setWrapStyleWord(true);
jsp=new JScrollPane(tx);
tf=new JTextField(20);
bt=new JButton("SEND");
bt.addActionListener(this);
pan=new JPanel();
pan.add(tf);
pan.add(bt);
add(pan,"South");
add(jsp,"Center");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

setTitle("THE SERVER");
setSize(400,300);
setVisible(true);

try{
ServerSocket server = new ServerSocket(1680);
Socket socket = server.accept();

InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader sin=new BufferedReader(in);
out=new PrintWriter(socket.getOutputStream(),true);

while(true){
String s=sin.readLine();
tx.append("@Client Said@: "+s+"\n");
}

}catch(Exception e){
e.printStackTrace();
}

}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bt){
String st = tf.getText();
tx.append("#Server Said#: "+st+"\n");
out.println(st);
tf.setText("");
}
}

public static void main(String[] args){
MyServer msr = new MyServer();
}
}

⑥ java開發聊天功能用什麼技術比較好

對於Java開發聊天功能,有多種實現方式和技術可供選擇,以下是一些常用的技術和框架:

1. WebSocket:WebSocket 是 HTML5 定義的一種新的協議。它實現了瀏覽器與伺服器全雙工(full-plex)通信——允許伺服器主動發送信息給客戶端。在 Java 中,可以使用 Spring WebSocket 或 Tomcat WebSocket 等構建 WebSocket 應用程序。

2. Socket:Java自帶的Socket API可以創建TCP客戶端和伺服器應用程序。使用 Socket 可以實現服務端和客戶端之間的實時通信。

3. XMPP:XMPP(擴展消息和存在協議)是一種開放式消息傳輸協議,基於XML、TCP 和其他協議構建,可以用於構建聊天室、聊天應用程序等。在 Java 中,可以使用 Smack API 來開發 XMPP 應用程序。

4. RabbitMQ:RabbitMQ 是一種流行的開源消息代理,支持多種消息協議和消息模式。它可以用於構建具有實時通信和消息傳遞功能的應用程序。

5. Netty:Netty 是一個高性能、非同步事件驅動的網路應用程序框架,適用於需要快速開發可伸縮的網路應用程序。它可以用於實現類似於 WebSocket 和 Socket 的實時通信功能。

總的來說,根據實際需求、開發經驗和項目預算等因素綜合考慮,選擇技術和框架。

閱讀全文

與java聊天室項目系統需求說明書相關的資料

熱點內容
js多個全選框 瀏覽:207
行程碼顯示數據異常什麼情況 瀏覽:887
圖片放到文件里邊打不開 瀏覽:551
蘋果手機描述文件不可移除怎麼辦 瀏覽:583
隨機早期檢測演算法程序 瀏覽:117
文件存在桌面為什麼找不到 瀏覽:968
js中表示數組 瀏覽:551
夢幻西遊所有版本 瀏覽:57
linux套接字編程recv讀取的長度大於緩沖區時會如何 瀏覽:666
這個卷含有頁面文件 瀏覽:714
phpjavanet工資 瀏覽:992
手機與網站連接以加密什麼意思 瀏覽:529
qt快速讀取excel文件 瀏覽:241
鄭州蘋果手機直營店 瀏覽:219
jsp背景音樂播放多首歌 瀏覽:545
電腦怎麼安裝之前的版本app 瀏覽:411
電腦傳送數據和手機傳輸哪個快 瀏覽:62
c盤文件全是英文找不到 瀏覽:633
如何讀取內存中的excel數據 瀏覽:574
iphone5最新固件 瀏覽:370

友情鏈接