java Socket簡易聊天工具_java

來源:互聯網
上載者:User

本文執行個體為大家分享了一款Socket簡易聊天工具,希望大家喜歡。

代碼運行如圖,看起來還不錯

服務端

package qiu;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.print.Printable;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.Calendar;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 MyServer extends JFrame implements ActionListener{ JTextArea jTextArea =null;//用來顯示純文字的單列區域 JTextField jTextField=null;//可以允許用來編輯單行文本 JButton sendButton=null; JPanel jPanel=null; JScrollPane jScrollPane =null; //把資訊發給用戶端對象 PrintWriter printWriter =null;/** * 服務端的主函數 * */public static void main(String[] args) { // TODO Auto-generated method stub  new MyServer();}/** * 服務端的建構函式,用來進行初始化 * */public MyServer(){ //這裡是對GUI的初始化 jTextArea = new JTextArea(); jTextField= new JTextField(20); sendButton= new JButton("發送"); sendButton.addActionListener(this); sendButton.setActionCommand("send"); jScrollPane= new JScrollPane(jTextArea); jPanel = new JPanel(); jPanel.add(jTextField);//添加編輯框 jPanel.add(sendButton);//添加按鈕 //將兩個面板添加布局 this.add(jScrollPane,BorderLayout.CENTER); this.add(jPanel,BorderLayout.SOUTH); this.setSize(400,300); this.setTitle("聊天伺服器"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定退出按鈕 this.setVisible(true); this.setResizable(true);  //下面是socket伺服器的搭建 try {  //伺服器監聽  ServerSocket ss = new ServerSocket(9988);  //等待用戶端串連  Socket socket = ss.accept();  //獲得用戶端發送過來的資料的流  BufferedReader br = new BufferedReader    (new InputStreamReader(socket.getInputStream()));  printWriter = new PrintWriter(socket.getOutputStream(),true);  //讀取從用戶端發送過來的資訊  while(true){   String info = br.readLine();   jTextArea.append("用戶端 "+getTime()+"\r\n"+info+"\r\n");  } } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace(); } }/** * 用來擷取當前的時間 * @return 當前的時間 */public String getTime(){ //可以對每個單獨時間域進行修改 Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY);//擷取小時 int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND); return hour+":"+minute+":"+second;  }/** * 當button被點擊的時候調用 */@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //當按鈕按下的時候調用 if(e.getActionCommand().equals("send")){  //把伺服器在jTextField寫的內容發送給用戶端  String info= jTextField.getText();  jTextArea.append("伺服器 "+getTime()+"\r\n"+info+"\r\n");  printWriter.println(info);  //清楚發送框內容  jTextField.setText("");  }  }}

用戶端

package qiu;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Calendar;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 extends JFrame implements ActionListener{ JTextArea jTextArea=null; JTextField jTextField=null; JPanel jPanel=null; JScrollPane jScrollPane=null; JButton sendButton=null; PrintWriter printWriter=null;/** * 用戶端的主函數 * */public static void main(String[] args) { // TODO Auto-generated method stub  new MyClient();}/** * 用戶端建構函式用來初始化 * */public MyClient(){ //GUI初始化 jTextArea= new JTextArea(); jTextField=new JTextField(20); sendButton= new JButton("發送"); sendButton.addActionListener(this); sendButton.setActionCommand("send"); jScrollPane=new JScrollPane(jTextArea); jPanel=new JPanel(); jPanel.add(jTextField); jPanel.add(sendButton); this.add(jScrollPane,BorderLayout.CENTER); this.add(jPanel,BorderLayout.SOUTH); this.setSize(400, 300); this.setTitle("聊天用戶端"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.setResizable(true);  //socket通訊代碼  try {  Socket s= new Socket("127.0.0.1",9988);  BufferedReader br = new BufferedReader    (new InputStreamReader(s.getInputStream()));  printWriter= new PrintWriter(s.getOutputStream(),true);  while(true){   //不停的讀取伺服器發過來的資訊   String string=br.readLine();   jTextArea.append("伺服器 "+getTime()+"\r\n"+string+"\r\n");   } } catch (UnknownHostException e) {  // TODO Auto-generated catch block  e.printStackTrace(); } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace(); }}/** * 用來擷取當前的時間 * @return 當前的時間 */public String getTime(){ //可以對每個單獨時間域進行修改 Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY);//擷取小時 int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND); return hour+":"+minute+":"+second; }/** * 當button被點擊的時候調用 */@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(sendButton.getActionCommand().equals("send")){  String info= jTextField.getText();  //將用戶端發送的資訊發送給服務端  jTextArea.append("用戶端 "+getTime()+"\r\n"+info+"\r\n");  printWriter.println(info);  jTextField.setText("");  } }}

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.