⑴ java聊天室
無資料庫版本;
================================= Client =================================
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
@SuppressWarnings("serial")
public class ChatClient extends Frame {
TextField tfText = new TextField();
TextArea taText = new TextArea();
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
public static void main(String[] args) {
new ChatClient().launchFrame();
}
ChatClient() {
super("Chat Client v1.1");
}
public void launchFrame() {
setBounds(200, 200, 400, 300);
setResizable(false);
add(taText, BorderLayout.NORTH);
add(tfText, BorderLayout.SOUTH);
pack();
taText.setEditable(false);
tfText.addActionListener(new tfTextListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
disConnect();
System.exit(0);
}
});
setVisible(true);
connect();
new Thread(new StrGetIn()).start();
}
private void connect() {
try {
s = new Socket("127.0.0.1", 24031);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
} catch (IOException e) {
System.out.println("伺服器不存在或系統錯誤,請聯系管理員,系統退出...");
System.exit(-1);
}
}
private void disConnect() {
try {
dos.writeUTF("Client exit...");
dos.close();
dis.close();
s.close();
} catch (IOException e1) {
System.out.println("無法關閉網路鏈接,系統非法退出...");
}
}
private class tfTextListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = tfText.getText().trim();
try {
if (!str.equals("")) {
//taText.append(str + "\n");
dos.writeUTF(str);
dos.flush();
} else {
taText.append("系統提示:****發送內容不能為空****\n");
}
} catch (IOException e1) {
System.out.println("網路連接錯誤,請聯系管理員,系統退出...");
System.exit(-1);
}
tfText.setText("");
}
}
private class StrGetIn implements Runnable {
public void run() {
try {
while(true) {
taText.append(dis.readUTF());
}
} catch (IOException e) {
System.out.println("Client readUTF error");
}
}
}
}
⑵ 用java做一個聊天室系統需要用到哪些知識呢
以前做過一個,界面用swing表現就可以了,程序主要用到socket編程,不需要框架吧,DB,mysql,oracle都可以
如果用 web,直接用js+xml文件就可以實現了
⑶ java 開發的聊天室怎樣添加系統時間
java取系統的時間的方法一般有兩種:System.currentTimeMillis()取當前的時間戳,new Date() 默認的也是當前的時間。不知道你這問的是這個嗎?
⑷ 怎麼用java做區域網的聊天工具(聊天室)
呵呵,樓主您好!要用Java做聊天室說簡單也不簡單,但是說難呢也不難.
說簡單點,就是會話跟蹤技術(我個人這樣理解).要做聊天室,您需要
使用到的工具: tomcat 伺服器(因為是免費的,其他也可以哦,呵呵).
Myeclipse(sun公司提供的編寫Java程序的工具,別說你不知道哈,
哪樣的話我就暈倒了哦,呵呵)
頁面框架的設計:index.jsp(聊天室主頁面)index_top.jsp(聊天室的頂部頁面)
usersonline.jsp(在線人數的統計及顯示頁面) sendMessage.jsp(發送信息的頁面)
showMessage.jsp(顯示聊天信息的頁面)register.jsp(用戶注冊的頁面)
login.jsp(用戶登錄頁面)
當然,這是最簡單的設計方式咯.您也可以設計得更好點.
頁面介紹與功能:
index.jsp 主要是聊天室的主頁面.由上中下3個框架組成,中間部分在分為
左右2個框架.實際上index.jsp就是一個由於5個框架組成的頁面
頂部框架:放index_top.jsp頁面.可以設計自己聊天室的特色(比如說:logo)
中間部分的左邊框架:showMessage.jsp 顯示聊天的信息
中間部分的右邊框架:usersonline.jsp(在線人數的統計及顯示頁面)
底部框架:sendMessage.jsp 這個發送信息的jsp頁面.不多說吧
聊天室的框架的設計大楷就是這樣子咯
實現聊天:
1.編寫一個servlet,用戶處理的信息(包括驗證用戶是否登錄和聊天信息)。
2.用戶發送信息之後,將發送的信息存放到Application中(群聊)(放在session中就是私聊)
3.顯示信息的頁面每個XX秒中獲取session或者Application中的數據顯示出來就OK了
更多的東西還是需要您學習Ajax之後再做,會有不一樣的效果哦。祝您成功喲.呵呵
⑸ 如何用Java編寫一個聊天室程序,可以支持單聊和多聊
聊天程序又叫即時通訊系統
分類兩部分:客戶端和服務端
客戶端:用戶聊天的界面
服務端:接收消息並轉發到指定用戶
其中服務端和客戶端用tcp或者udp連接,使用socket編程完成通信。
按著這個思路可以開發出一套聊天程序
客戶端常用界面 bs版本的又layim
服務端 openfire或者自己實現
⑹ java聊天室界面如何做
JAVA聊天室要用到:
Swing圖形用戶界面。JAVA中資料庫的操作,以及JAVA中網路的連接
當把這些知識學好,做一個聊天室應該是不成問題的。
Swing圖形用戶界面:實現窗口的顯示。
資料庫的操作實現用戶登錄,聊天記錄存儲等功能。
網路連接實現不同客戶端聊天。
==
⑺ java的一個簡單聊天室的系統結構,大概的跟我說一下。
定義要求:⑴完善的支持中文。由於Java編譯器版本及運行環境的差異等原因,在Java語言的中文處理中常出現亂碼等現象,表現在中文顯示與網路傳輸不正常、中文不能輸入等方面。在這個聊天室系統中我們將徹底解決中文的兼容性問題。⑵具有健壯性。即聊天室系統能夠處理各種異常,能夠識別和控制客戶端的各種行為,能夠返回清理不正常退出後所分配的系統資源,能夠踢出超時連接用戶以減輕伺服器負載等。雖然Java語言本身能夠自動收集處理無用的對象,但我們仍然需要作一定的清理工作。⑶廣泛的適應性。因為我們不能要求聊天用戶必須使用某種瀏覽器或操作系統,因此所編寫的Java程序,尤其是Applet,必須能在各種平台的各個版本的瀏覽器上都能正常運行。考慮到網路用戶的使用情況,我們定的標準是能適應以下版本的瀏覽器:Netscape 3.x,Netscape Communicator 4.x,Internet Explorer 3.x、4.x、5.x中英文版。設計實現:基於Java的Web聊天室系統包括聊天伺服器和客戶端兩部分。聊天伺服器是一個Java Application,與Web伺服器程序運行在同一機器上。客戶端部分即是一個含Java Applet的HTML頁面,它由Web伺服器傳送給客戶端瀏覽器,交由瀏覽器的Java虛擬機(VM)解釋執行。該Applet初始化後與聊天伺服器進行連接,聊天伺服器對於每個連接請求產生一個連接線程(Connection Thread),來維護和管理與該客戶端的會話。客戶端的發言被傳送到伺服器端後由其向其他客戶進行廣播(Broadcast),達到相互聊天的目的。 在聊天伺服器中,我們使用哈希表(Hashtable)來存儲所有的連接線程。主線程為ChatServer,對於每個新的客戶連接請求產生一個Connection線程。同時我們還運行了一個檢查線程CheckActiveTimer,它相當於一個定時器,每隔一定時間就掃描所有的客戶連接線程(即掃描Hashtable),檢查每個客戶連接是否超時(例如很長時間沒有發言或者死機),並給出警告或直接踢出(Kick)用戶。
⑻ Java實現一個簡單的聊天室
基本原理就是弄一個全局的容器,每進來一個人,將ip等相關信息放入容器,有人發送消息時,遍歷容器,向除它而外的所有人發送該消息。並不是很難,但是要考慮的細節還是不少的
⑼ 我做java的簡易聊天室,已經可以群聊和私聊,如何把創建房間加進去,且只能同一個房間里才能群聊和私聊
我說下思路:
1、客戶端創建房間時給每個房間分配惟一的一個房間ID,房間是公開的,每個連接的客戶端都可以看到,房間屬性,比如密碼,比如黑名單,房間保存在Server內存當中,如果你使用了集群,建議存儲到分布式緩存當中(Redis是最好的選擇,其次是memcached),當創建完成後,將房間信息發送給所有客戶端。新客戶端連接進來時,客戶端要主動從服務端拉取房間信息。建議採用服務端主動通知(房間增減,服務端主動通知給所有客戶端)和客戶端定時輪詢(客戶端起個定時任務,每隔一定時間主動向服務端拉取房間列表)的方式來保證房間列表的動態更新。
2、當客戶端選擇加入房間時,如果設置有加入條件,比如密碼,那就提示客戶端輸入,如果是其他條件就判斷加入客戶端是否符合這個條件。服務端保存房間同客戶端的關聯關系(可以設計成一對多,也就是一個客戶端只能在一個房間聊天,也可以設計成多對多,一個客戶端可以同時加入多個房間聊天,主要看設計),並將這個消息通知給這個房間所有的客戶端列表「歡迎***進入房間」(消息的發送者為系統,房間ID這個房間的ID,接收人無,表示是這個房間的公開消息,消息內容即:歡迎***進入房間。)
3、把聊天內容當成消息的話,那消息應該有這樣的屬性,發送人,房間ID(如果沒有房間ID就當成系統公告消息,在所有房間顯示),接收人(如果沒有指定接收人,則是公開消息,如果有接收人,就是私聊消息,只能在同一個房間私聊,那在發消息的時候要判斷下接收客戶端的是否在這個房間列表當中)。
4、再來說消息路由設置,當客戶端發送消息時,根據房間ID,找到這個這個房間內所有的客戶端列表,如果沒有指定接收人,那消息就推送給這個房間關聯的所有客戶端,如果指定有接收人,接收人不在這個房間,直接提示「***已經離開」,如果還在就把消息推送給這個指定的客戶端。
5、房間的管理:踢人,把這個客戶端從房間同客戶端關聯關系解除,並在房間顯示消息「***被踢出房間」等等