国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Java編程實現基于TCP協議的Socket聊天室示例

2024-07-13 10:17:31
字體:
來源:轉載
供稿:網友

本文實例講述了Java編程實現基于TCP協議的Socket聊天室。分享給大家供大家參考,具體如下:

這里使用Socket套接字進行編程,完成的是基于TCP可靠服務實現服務器與客戶端的雙通信。

Server服務器端:

package com.han;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.*;import java.net.*;import javax.swing.JDialog;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;/** * 本程序實現了一個TCP程序的服務器編程部分。 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與客戶端的雙通信。 * 客戶端的編程見本包中的類Client * @author HAN * */@SuppressWarnings("serial")public class Server extends JDialog{  private BufferedReader reader;  private PrintWriter writer;  private ServerSocket server;  private Socket socket;  private JTextArea ta=new JTextArea();  private JScrollPane sp=new JScrollPane(ta);  private JTextField tf=new JTextField();  Container cc;  public Server(String title) {    setTitle(title);    addWindowListener(new WindowAdapter() {      public void windowClosing (WindowEvent we) {        dispose(); //撤銷dialog一切相關資源        System.exit(0); //正常退出程序      }    });    cc=getContentPane();    setLayout(null);    ta.setLineWrap(true);    ta.setEditable(false);    sp.setBounds(0,0,300,342);    tf.setBounds(0,342,300,25);    cc.add(sp);    cc.add(tf);    tf.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        try {          writer=new PrintWriter(socket.getOutputStream(),true);        } catch (IOException e1) {          // TODO Auto-generated catch block          e1.printStackTrace();        }        writer.println(tf.getText());        ta.append("User1:"+tf.getText()+'/n');        tf.setText("");      }    });  }  void getserver(){    try{      server=new ServerSocket(8998);      ta.append("服務器套接字已經創建成功/n");      while(true){        ta.append("等待客戶機的連接/n");        socket=server.accept();        ta.append("客戶機已連接/n");        reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));        getClientMessage();      }    }catch(Exception e){      e.printStackTrace();    }  }  private void getClientMessage(){    try {      while(true){        String news=reader.readLine();        if(news!=null){          ta.append("User2:"+news+"/n");        }else{          ta.append("User2(客戶端) 已斷開鏈接/n");          break;        }      }    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    try{      if(reader!=null){        reader.close();      }    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    if(socket!=null){      try {        socket.close();      } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }  }  public static void main(String[] args) {    Server user1=new Server("User1");    user1.setBounds(0,0,300,400);    user1.setResizable(false);    user1.setVisible(true);    user1.getserver();  }}

Client客戶端:

package com.han;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import javax.swing.*;/** * 本程序實現了一個TCP程序的客戶端編程部分。 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與服務器的雙通信。 * 服務器的編程見本包中的類Server * 可以在不同的平臺與不同的機器上運行,只是要把代碼中寫的IP地址修改為運行服務器程序Server的機器的IP地址。 * @author HAN * */@SuppressWarnings("serial")public class Client extends JDialog{  private BufferedReader reader;  private PrintWriter writer;  private Socket socket;  private JTextArea ta=new JTextArea();  private JScrollPane sp=new JScrollPane(ta);  private JTextField tf=new JTextField();  Container cc;  public Client(String title) {    setTitle(title);    addWindowListener(new WindowAdapter() {      public void windowClosing (WindowEvent we) {        dispose(); //撤銷dialog一切相關資源        System.exit(0); //正常退出程序      }    });    cc=getContentPane();    setLayout(null);    ta.setLineWrap(true);    ta.setEditable(false);    sp.setBounds(0,0,300,342);    tf.setBounds(0,342,300,25);    cc.add(sp);    cc.add(tf);    tf.addActionListener(new ActionListener(){      public void actionPerformed(ActionEvent e){        writer.println(tf.getText());        ta.append("User2:"+tf.getText()+'/n');        tf.setText("");      }    });  }  private void connect(){    ta.append("嘗試連接/n");    try {      socket=new Socket("192.168.1.3",8998);    } catch (UnknownHostException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    try {      writer=new PrintWriter(socket.getOutputStream(),true);    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    ta.append("完成連接/n");  }  private void getClientMessage(){    try {      reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));      while(true){        String news=reader.readLine();        if(news!=null){          ta.append("User1:"+news+"/n");        }else{          ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信/n");          break;        }      }    } catch (IOException e) {      // TODO Auto-generated catch block      ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信/n");      e.printStackTrace();    }    try{      if(reader!=null){        reader.close();      }    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    if(socket!=null){      try {        socket.close();      } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }  }  public static void main(String[] args) {    Client user2=new Client("User2");    user2.setBounds(0,0,300,400);    user2.setVisible(true);    user2.setResizable(false);    user2.connect();    user2.getClientMessage();  }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马鞍山市| 西林县| 横山县| 邓州市| 柳江县| 安仁县| 肇东市| 新蔡县| 呼和浩特市| 广丰县| 广昌县| 苍山县| 班戈县| 扬州市| 定南县| 贵定县| 施秉县| 游戏| 岢岚县| 麦盖提县| 巴林左旗| 洛川县| 蓬莱市| 景宁| 克东县| 五河县| 榆中县| 广德县| 宜宾市| 平泉县| 东乌珠穆沁旗| 柏乡县| 大名县| 莎车县| 堆龙德庆县| 七台河市| 济源市| 东莞市| 金华市| 锡林浩特市| 顺平县|