本文實例為大家分享了一款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(""); } }}以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。