1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          QQ網絡聊天室--Java編程

          來源:互聯網轉載 時間:2024-01-29 08:10:18

          一、項目

          做一個簡易的聊天窗口程序,實現多人登錄在線聊天功能。沒有數據庫的導入,等后期學習更多知識之后,再進行優化。

          Server.java(服務器端)

          import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;public class Server extends JFrame {private JTextArea showDialog = null;      // 定義文本區private ServerSocket serverSocket = null; // 定義接收插座private int port = 0;                     // 服務器應用程序所占的TCP端口號// 創建一個用來存放為每一個客戶端提供服務的線程對象的集合List<ForClient> clients = new ArrayList<ForClient>();void init() {showDialog = new JTextArea(10, 20);    // 設置文本區的大小this.add(new JScrollPane(showDialog)); // 將帶有滾動條文本區添加在窗口中this.setTitle("117聊天室服務器端");     // 定義窗口屬性this.setBounds(50, 50, 500, 400);this.setVisible(true);this.setDefaultCloseoperation(JFrame.EXIT_ON_CLOSE);this.validate();}void start() {this.init();port = 1111;try {serverSocket = new ServerSocket(port);     // 將端口號接入插座接口showDialog.setText("服務器已就緒,等待客戶端的連接請求。。" + "\n");while (true) {Socket socket = serverSocket.accept();     // 建立插座接口,實現連接。showDialog.append("連接已建立!" + "\n");ForClient client = new ForClient(socket); //clients.add(client);                      // 將對象存入集合里new Thread(client).start();               // 建立新的線程開始運行}} catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println("服務器應用程序已經在運行,或該端口號已經被占用!");System.exit(0);}}public static void main(String[] args) {// TODO Auto-generated method stubServer serverWindow = new Server();serverWindow.start();}// 將一個客戶端發送過來的消息轉發給其他客戶端private class ForClient implements Runnable {Socket socket = null;DataInputStream dis = null;DataOutputStream dos = null;public ForClient(Socket socket) {// TODO Auto-generated constructor stubthis.socket = socket;try {dis = new DataInputStream(socket.getInputStream());dos = new DataOutputStream(socket.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void run() {// TODO Auto-generated method stubboolean isQuit = true;while (isQuit) { // 不斷讀入收到的消息try {String mess = dis.readUTF();showDialog.append(mess + "\n");for (int i = 0; i < clients.size(); i++) {clients.get(i).send(mess);         // 迭代器實現給多個客戶端發送消息,轉發功能。}} catch (EOFException e) {System.out.println("客戶端已退出,隨他去吧~" + "\n");showDialog.append("客戶端已退出" + "\n");clients.remove(this);                 // 移除當前這個線程,調用remove方法for (int i = 0; i < clients.size(); i++) {clients.get(i).send("一個客戶端已退出!!"); // 給其他的客戶端發送消息,有一個客戶端已退出。}isQuit = false; // 結束子線程,變量置為false} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}void send(String s) {try {dos.writeUTF(s);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

          client.java(客戶端)

          import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class Client extends JFrame {private JTextArea showMessage = null;       // 定義文本區private JTextField inputMessage = null;     // 定義文本框private JButton sendBtn = null;             // 定義發送按鈕private Box boxH = null;                   // 定義一個水平盒子private Box boxV = null;                   // 定義一個垂直盒子private MyListener myListener = null;      // 定義監聽器對象private Socket socket = null;              // 定義插座對象private DataInputStream dis = null;         // 定義輸入流管道private DataOutputStream dos = null;       // 定義輸出流管道private int serverPort = 1111;             // 定義端口號private boolean isConnect = false;         // 表示連接是否建立的變量void init() {showMessage = new JTextArea(20, 30);   // 設置文本區的大小inputMessage = new JTextField(15);     // 設置文本框的長度sendBtn = new JButton("發送");myListener = new MyListener();         // 建立監聽對象事件inputMessage.addActionListener(myListener); // 文本框監聽事件sendBtn.addActionListener(myListener); // 發送按鈕監聽事件/** * 1.創建水平的盒子容器 2.向水平盒子容器里添加輸入文本框和發送按鈕 */boxH = Box.createHorizontalBox();      // 水平盒子boxH.add(inputMessage);                 // 向boxH中添加輸入文本框boxH.add(sendBtn);                     // 向boxH中添加發送按鈕/** *1.創建垂直的盒子容器 2.向垂直盒子容器里添加滾動方格文本區,以及水平盒子 */boxV = Box.createVerticalBox();         // 垂直盒子boxV.add(new JScrollPane(showMessage)); // 添加滾動方格的文本區boxV.add(boxH);                         // 將boxH放入boxV中this.add(boxV);                         // 將boxV放入窗口this.setTitle("117聊天室客戶端");this.setBounds(400, 400, 500, 500);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置關閉窗口this.validate();                         // 刷新,顯示窗口內容addWindowListener(new WindowAdapter() { // 窗口適配器@Overridepublic void windowClosing(WindowEvent e) {super.windowClosing(e);         // 關閉窗口disConnect();                   // 關閉連接}});}void connect() {try {socket = new Socket("127.0.0.1", serverPort);showMessage.setText("已跟服務器建立連接!" + "\n");isConnect = true;} catch (UnknownHostException e) {showMessage.append("無法跟主機建立連接!請確認服務器地址是否打開!" + "\n");} catch (IOException e) {showMessage.append("無法跟服務器建立連接!請確定服務器已打開!" + "\n");}new Thread(new Runnable() {         // 建立一個新的線程@Overridepublic void run() {// TODO Auto-generated method stubtry {dis = new DataInputStream(socket.getInputStream()); //while (isConnect) {     // 當變量為true執行循環String mess = dis.readUTF();     // 定義mess字符串讀取收到的數據showMessage.append(mess + "\n"); // 將數據顯示在文本區showMessage}} catch (SocketException e) {// System.out.println("我已退出,你們聊吧。。");showMessage.append("服務器已關閉,都撤了吧。。");} catch (NullPointerException e) {System.out.println("服務器未開啟,請確認。。");} catch (IOException e) {e.printStackTrace();}}}).start();                             // 調用start方法}void disConnect() {isConnect = false;                     // 變量置為falsetry {if (dis != null)dis.close();if (dos != null)dos.close();if (socket != null)socket.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} finally {System.exit(0);                     // 退出程序}}void start() {this.init();this.connect();                         // 向服務器發送連接請求}private class MyListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String sendContent = inputMessage.getText().trim();// System.out.println(sendContent);try {dos = new DataOutputStream(socket.getOutputStream());dos.writeUTF(sendContent);     //將輸入的文本內容正常寫出來,不會出現亂碼inputMessage.setText("");     // 清空輸入框} catch (IOException e1) {e1.printStackTrace();}}}public static void main(String[] args) {Client clientwindow = new Client();     // 創建一個客戶端窗口clientwindow.start();}}
          標簽:vqq聊天室-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          什么是熱更新?熱更新是什么意思?如果您經常玩游戲,您應該會看到,當您打開游戲客戶端時,系統會提示您有更新,您需要下載更新包。對于手機游戲來說,可能從幾米到幾百米不等。對于電腦游戲,如lol,它的范圍也從幾十米到幾百兆字節。這樣,您只需要下載客戶端本身的更新包,而不需要再次下載整個客戶端的更新方法稱為熱更新。蘋果對應用程序和游戲的內容有嚴格的控制。每個應用程序或游戲在上架前都會經過審核。也就是說,蘋...

          世界著名的八大紅葡萄酒酒莊?波爾多八大名莊包括拉菲村、拉圖村、武當王、瑪戈村、紅巖榮、貝爾圖斯、歐松莊、白馬莊。法國紅酒八大名莊是哪些?八個著名的法國村莊:1.拉菲莊園2.拉圖爾城堡拉圖爾堡3.瑪歌酒莊瑪歌莊4.奧比昂莊園別墅(紅巖榮莊)5.海燕白翠莊(貝爾圖斯)6.木桐酒莊木桐莊7.白馬村莊園8.歐頌酒莊(歐頌莊)1.拉菲莊拉菲羅斯柴爾德酒莊(法語:Chateau Lafite Rothsc...

          唐山是國家幾線城市?作為少數一線城市,我們應該看看他們的綜合實力。首先看經濟,唐山的經濟是河北省最大的,但是多少GDP能進到老百姓的口袋!財政收入能給人民帶來多少實惠!這些重中型企業主要是重工業和高附加值產業,而唐山的重工業和高附加值企業則不是。另外,眾所周知,為了發展國際村,唐山產生的財政收入很少。其次,從城市建設的角度看,唐山主城區是魯北區和魯南區,總面積只有290平方公里,但仍有大面積的土地...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>