java即時通訊框架
A. 畢設做用java實現的即時通訊系統。才從頭開始學java,,請問需要哪些軟體目前下了Eclipse,還需要別的嗎
JAVA運行環境和ECLIPSE是必須的。(也可以不用ECLIPSE,用記事本。)
簡單上網查一下,怎麼運行JAVA類。
然後上網下載JAVA SOCKET例子。(例子一般都是即時通訊,或者網路游戲之類的)
畢業設計的話,客戶端最好也弄一下,比如用java 的swing包之類的。
B. 什麼是java五大框架
JAVA三大框架Struts、hibernate和spring。struts 主要負責表示層的顯示,spring 利用它的IOC和AOP來處理控制業務(負責對資料庫的操作),hibernate 主要作用是數據的持久化到資料庫。
一、Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。 Spring提供了管理業務對象的一致方法並且鼓勵了注入對介面編程而不是對類編程的良好習慣。
Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務--如果你需要--還能實現你自己的aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器集成的強大而靈活的MVC Web框架。
二、說到Struts框架,它是一個基於Sun J2EE平台的MVC框架,主要是採用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。
三、Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
C. 怎樣用java web和websocket實現網頁即時通訊
java 後台做 websocket 服務端。 頁面使用js的websocket客戶端 連接上 服務端 就能實時通信了。
D. 求java即時通訊的一個簡單功能代碼
20分!!!??(⊙o⊙)
給你這個做參考吧。自己改一下就行了。(共兩個文件)
//ChatClient.java
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ChatClient extends Frame {
Socket s = null;
DataOutputStream dos = null;
DataInputStream dis = null;
private boolean bConnected = false;
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) {
new ChatClient().launchFrame();
}
public void launchFrame() {
setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
tRecv.start();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
System.out.println("connected!");
bConnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
/*
try {
bConnected = false;
tRecv.join();
} catch(InterruptedException e) {
e.printStackTrace();
} finally {
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/
}
private class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = tfTxt.getText().trim();
//taContent.setText(str);
tfTxt.setText("");
try {
//System.out.println(s);
dos.writeUTF(str);
dos.flush();
//dos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
private class RecvThread implements Runnable {
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
//System.out.println(str);
taContent.setText(taContent.getText() + str + '\n');
}
} catch (SocketException e) {
System.out.println("退出了,bye!");
} catch (EOFException e) {
System.out.println("推出了,bye - bye!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//ChatServer.java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
boolean started = false;
ServerSocket ss = null;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new ChatServer().start();
}
public void start() {
try {
ss = new ServerSocket(8888);
started = true;
} catch (BindException e) {
System.out.println("埠使用中....");
System.out.println("請關掉相關程序並重新運行伺服器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
try {
while(started) {
Socket s = ss.accept();
Client c = new Client(s);
System.out.println("a client connected!");
new Thread(c).start();
clients.add(c);
//dis.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket s;
private DataInputStream dis = null;
private DataOutputStream dos = null;
private boolean bConnected = false;
public Client(Socket s) {
this.s = s;
try {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected = true;
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str) {
try {
dos.writeUTF(str);
} catch (IOException e) {
clients.remove(this);
System.out.println("對方退出了!我從List裡面去掉了!");
//e.printStackTrace();
}
}
public void run() {
try {
while(bConnected) {
String str = dis.readUTF();
System.out.println(str);
for(int i=0; i<clients.size(); i++) {
Client c = clients.get(i);
c.send(str);
//System.out.println(" a string send !");
}
/*
for(Iterator<Client> it = clients.iterator(); it.hasNext(); ) {
Client c = it.next();
c.send(str);
}
*/
/*
Iterator<Client> it = clients.iterator();
while(it.hasNext()) {
Client c = it.next();
c.send(str);
}
*/
}
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(dis != null) dis.close();
if(dos != null) dos.close();
if(s != null) {
s.close();
//s = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
E. 我在用java做一個簡單的即時通訊工具,自學的所以很多都不會,希望可以幫幫我
package service_client_for_many;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 雙工伺服器,多人 本伺服器默認不提供服務,而是在客戶端連接時創建獨立線程負責業務
**/
public class MutilServer implements ActionListener {
private JFrame frame;
/** 邊界布局的主面板 */
private JPanel panelMain;
private JPanel panelDown;
private JTextArea ta;
private JTextField txt;
private JButton but;
private JScrollPane jsp;
private Font font;
/**
* 當前伺服器使用埠
*/
private int port = 6666;
/**
* 遠程客戶端的IP
*/
private String clientIp;
/**
* 記錄所有正在工作的服務員的登記表
*/
private Vector<Waiter> dengJiBiao;
public MutilServer() {
frame = new JFrame("雙工多人伺服器");
panelMain = new JPanel(new BorderLayout());
panelDown = new JPanel();
ta = new JTextArea();
txt = new JTextField(20);
but = new JButton("發送");
jsp = new JScrollPane(ta);
// 粘貼界面
panelDown.add(txt);
panelDown.add(but);
panelMain.add(jsp, BorderLayout.CENTER);
panelMain.add(panelDown, BorderLayout.SOUTH);
// 字體
font = new Font("宋體", Font.BOLD, 18);
txt.setFont(font);
ta.setFont(font);
but.setFont(font);
// 文本域只讀
ta.setEditable(false);
// 按鈕添加監聽
but.addActionListener(this);
frame.add(panelMain);
frame.setBounds(100, 300, 400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 關閉窗體時結束程序
frame.setAlwaysOnTop(true);// 永遠在所有窗體最上
frame.setVisible(true);
// 創建登記表
dengJiBiao = new Vector<Waiter>();
// 游標給消息文本框
txt.requestFocus();
createServer();
}
/**
* 顯示文本到文本域,並且追加一個換行
*
* @param msg
* 要顯示的文本
*/
public void showTxt(String msg) {
ta.append(msg + "\n");
}
public static void main(String[] args) {
new MutilServer();
}
// 動作監聽
public void actionPerformed(ActionEvent e) {
if (e.getSource() == but) {// 發送
txt.requestFocus();
String str = txt.getText().trim();
if(str.length()==0){
showTxt("不可以發送空消息");
return;
}
if(dengJiBiao.size()==0){
showTxt("當前木有客戶連接,無法發送信息");
return;
}
str ="伺服器消息:"+str;
//找到所有登記表中的服務員,實現群發
for (int i = 0; i < dengJiBiao.size(); i++) {
Waiter w = dengJiBiao.get(i);//得到當前循環的服務員
w.send(str);
}
// 清空文本框,得到焦點
txt.setText("");
}
}
/**
* 啟動網路伺服器
*/
public void createServer() {
showTxt("正在啟動伺服器,使用本機" + port + "埠...");
try {
ServerSocket server = new ServerSocket(port);
showTxt("伺服器啟動成功,開始監聽網路連接...");
while (true) {
Socket jiaoYi = server.accept();
// 每得到一個交易,就是來了一個客戶端.需要交給一個新的服務員去維護處理
new Waiter(jiaoYi, dengJiBiao, this);
}
} catch (IOException e) {
showTxt("伺服器啟動失敗,可能埠被佔用");
}
}
}
package service_client_for_many;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/** 客戶端雙工 */
public class MyClient implements ActionListener{
private JFrame frame;
/** 邊界布局的主面板 */
private JPanel panelMain;
private JPanel panelDown;
private JTextArea ta;
private JTextField txt;
private JButton but;
private JScrollPane jsp;
private Font font;
/**
* 伺服器IP
*/
private String ip = "192.168.10.239";
/**
* 伺服器埠
*/
private int port = 6666;
private BufferedReader br;
private BufferedWriter bw;
public MyClient() {
frame = new JFrame("雙工客戶端1");
panelMain = new JPanel(new BorderLayout());
panelDown = new JPanel();
ta = new JTextArea();
txt = new JTextField(20);
but = new JButton("發送");
jsp = new JScrollPane(ta);
// 粘貼界面
panelDown.add(txt);
panelDown.add(but);
panelMain.add(jsp, BorderLayout.CENTER);
panelMain.add(panelDown, BorderLayout.SOUTH);
// 字體
font = new Font("宋體", Font.BOLD, 18);
txt.setFont(font);
ta.setFont(font);
but.setFont(font);
// 文本域只讀
ta.setEditable(false);
//按鈕添加監聽
but.addActionListener(this);
frame.add(panelMain);
frame.setBounds(500, 200, 400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 關閉窗體時結束程序
frame.setAlwaysOnTop(true);// 永遠在所有窗體最上
frame.setVisible(true);
// 游標給消息文本框
txt.requestFocus();
linkServer();
}
/** 顯示文本到文本域,並且追加一個換行
* @param msg 要顯示的文本
*/
public void showTxt(String msg) {
ta.append(msg+"\n");
}
public static void main(String[] args) {
new MyClient();
}
//動作監聽
public void actionPerformed(ActionEvent e) {
if (e.getSource() == but) {// 發送
if (bw == null) {
showTxt("當前沒有客戶端連接,無法發送消息");
return;
}
String s = txt.getText().trim();// 得到文本框要發送的文字,去掉兩端空格
if (s.length() == 0) {
showTxt("不可以發送空消息");
return;
}
showTxt("我說:" + s);
try {
bw.write(s + "\n");// 發送網路消息給對方
bw.flush();// 清空緩沖
} catch (IOException e1) {
showTxt("信息:" + s + " 發送失敗");
}
// 清空文本框,得到焦點
txt.setText("");
txt.requestFocus();
}
}
/**
* 連接伺服器
*/
public void linkServer(){
showTxt("准備連接伺服器"+ip+":"+port);
try {
Socket jiaoYi = new Socket(ip,port);
showTxt("連接伺服器成功,開始進行通訊");
// 得到輸入和輸出
br = new BufferedReader(new InputStreamReader(
jiaoYi.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(
jiaoYi.getOutputStream()));
String s = null;
while ((s = br.readLine()) != null) {
showTxt( s);
}
} catch (UnknownHostException e) {
showTxt("連接伺服器失敗,網路連通錯誤");
} catch (IOException e) {
showTxt("與伺服器通訊失敗,已經斷開連接");
}
showTxt("關閉");
}
}
package service_client_for_many;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/** 客戶端雙工 */
public class MyClient2 implements ActionListener{
private JFrame frame;
/** 邊界布局的主面板 */
private JPanel panelMain;
private JPanel panelDown;
private JTextArea ta;
private JTextField txt;
private JButton but;
private JScrollPane jsp;
private Font font;
/**
* 伺服器IP
*/
private String ip = "192.168.10.239";
/**
* 伺服器埠
*/
private int port = 6666;
private BufferedReader br;
private BufferedWriter bw;
public MyClient2() {
frame = new JFrame("雙工客戶端2");
panelMain = new JPanel(new BorderLayout());
panelDown = new JPanel();
ta = new JTextArea();
txt = new JTextField(20);
but = new JButton("發送");
jsp = new JScrollPane(ta);
// 粘貼界面
panelDown.add(txt);
panelDown.add(but);
panelMain.add(jsp, BorderLayout.CENTER);
panelMain.add(panelDown, BorderLayout.SOUTH);
// 字體
font = new Font("宋體", Font.BOLD, 18);
txt.setFont(font);
ta.setFont(font);
but.setFont(font);
// 文本域只讀
ta.setEditable(false);
//按鈕添加監聽
but.addActionListener(this);
frame.add(panelMain);
frame.setBounds(900, 200, 400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 關閉窗體時結束程序
frame.setAlwaysOnTop(true);// 永遠在所有窗體最上
frame.setVisible(true);
// 游標給消息文本框
txt.requestFocus();
linkServer();
}
/** 顯示文本到文本域,並且追加一個換行
* @param msg 要顯示的文本
*/
public void showTxt(String msg) {
ta.append(msg+"\n");
}
public static void main(String[] args) {
new MyClient2();
}
//動作監聽
public void actionPerformed(ActionEvent e) {
if (e.getSource() == but) {// 發送
if (bw == null) {
showTxt("當前沒有客戶端連接,無法發送消息");
return;
}
String s = txt.getText().trim();// 得到文本框要發送的文字,去掉兩端空格
if (s.length() == 0) {
showTxt("不可以發送空消息");
return;
}
showTxt("我說:" + s);
try {
bw.write(s + "\n");// 發送網路消息給對方
bw.flush();// 清空緩沖
} catch (IOException e1) {
showTxt("信息:" + s + " 發送失敗");
}
// 清空文本框,得到焦點
txt.setText("");
txt.requestFocus();
}
}
/**
* 連接伺服器
*/
public void linkServer(){
showTxt("准備連接伺服器"+ip+":"+port);
try {
Socket jiaoYi = new Socket(ip,port);
showTxt("連接伺服器成功,開始進行通訊");
// 得到輸入和輸出
br = new BufferedReader(new InputStreamReader(
jiaoYi.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(
jiaoYi.getOutputStream()));
String s = null;
while ((s = br.readLine()) != null) {
showTxt(s);
}
} catch (UnknownHostException e) {
showTxt("連接伺服器失敗,網路連通錯誤");
} catch (IOException e) {
showTxt("與伺服器通訊失敗,已經斷開連接");
}
showTxt("關閉");
}
}
package service_client_for_many;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Vector;
/**
* 服務員,線程類
* 在客戶端連接後創建啟動
* 負責當前客戶端的所有數據收發
* 並且在業務需要時,將結果與伺服器(老闆)進行報告
*/
public class Waiter extends Thread{
private Socket sc;
private Vector<Waiter> dengJiBiao ;
private MutilServer server;
/**
* 客戶端IP
*/
private String ip;
private BufferedReader br;
private BufferedWriter bw;
/** 創建一個的新的服務員,負責當前傳遞的客戶端連接(交易)
* 啟動新線程
* @param sc 負責的交易
* @param dengJiBiao所有正在工作的服務員(所有交易)
* @param server 老闆,也就是伺服器
*/
public Waiter(Socket sc, Vector<Waiter> dengJiBiao,
MutilServer server) {
this.sc = sc;
this.dengJiBiao = dengJiBiao;
this.server = server;
//初始化連接的准備工作
ip = sc.getInetAddress().getHostAddress();
// 得到輸入和輸出
try {
br = new BufferedReader(new InputStreamReader(
sc.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(
sc.getOutputStream()));
} catch (IOException e) {
this.server.showTxt("與客戶端:"+ip+"建立通訊失敗");
e.printStackTrace();
return;//無效客戶,不再繼續
}
this.server.showTxt("客戶端:"+ip+"連接伺服器成功");
//啟動線程
this.start();
}
//線程
public void run(){
//開始時,登記開工
dengJiBiao.addElement(this);
System.out.println(this.getClass().getName());
try {
String s = null;
while ((s = br.readLine()) != null) {
server.showTxt("客戶"+ip+"說:" + s);
//當前客戶發來的信息,其它客戶也要能看得見.需要實現轉發
//從登記表找到所有正在幹活的服務員
for (int i = 0; i < dengJiBiao.size(); i++) {
Waiter w = dengJiBiao.get(i);
//排除掉當前服務員自己
if(w!=this)
w.send("客戶"+ip+"說:" + s);
}
}
} catch (Exception e) {
server.showTxt("客戶"+ip+"已經離開");
}
//結束時,登記下班
dengJiBiao.removeElement(this);
}
/** 發送信息給當前服務員負責的客戶端
* @param msg
*/
public void send(String msg){
try {
bw.write(msg+"\n");
bw.flush();
} catch (Exception e) {
server.showTxt("給客戶:"+ip+"發送信息"+msg+"失敗");
}
}
}
一個伺服器類·兩個客戶端類,一個線程類負責收發
F. 怎麼用Java寫一個即時通訊軟體
我看到過一個,鏈接給你,用websocket的
https://github.com/TooTallNate/Java-WebSocket
裡面有個example就是im的
G. java實現socket通信,編寫一個即時通信工具,類似QQ
都不知道網路下的,網路搜索下,相關的東西很多。
H. 求一個java開源的即時通訊工具
我寫過一個。。。
畢業設計 基於Java的在線聊天系統。。。
不過不是很大,才1W 來行代碼,基本功能倒是有
I. 即時通訊java有什麼實現的方案嗎,新手求問
業務比較大的自己寫socket,但比較難,此外可以考慮websocket(tomcat7以上支持,實現也比socket簡單),也可以選用成熟的高並發nio框架如mina等,單純的推送也可以用mqtt,如果是即時聊天的話可以選用成熟的XMPP,以上是自己實現的,如果對業務比較急,自身開發能力有限可以用第三方的服務,如聊天可以用環信、融雲,推送可以用極光等。
望採納,希望可以幫到你!
J. javaWeb項目中如何實現即時通訊!還要求實現消息定時發送功能!
結合資料庫設置相應的消息欄位,然後根據具體情況進行操作。