本文執行個體為大家分享了一款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(""); } }}
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。