java Socket簡易聊天工具
本文實例為大家分享了一款Socket簡易聊天工具,希望大家喜歡。
代碼運行如圖,看起來還不錯
服務(wù)端
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; /** * 簡單聊天軟件的服務(wù)器 * */ public class MyServer extends JFrame implements ActionListener{ JTextArea jTextArea =null;//用來顯示純文本的單行區(qū)域 JTextField jTextField=null;//可以允許用來編輯單行文本 JButton sendButton=null; JPanel jPanel=null; JScrollPane jScrollPane =null; //把信息發(fā)給客戶端對象 PrintWriter printWriter =null; /** * 服務(wù)端的主函數(shù) * */ public static void main(String[] args) { // TODO Auto-generated method stub new MyServer(); } /** * 服務(wù)端的構(gòu)造函數(shù),用來進(jìn)行初始化 * */ public MyServer(){ //這里是對GUI的初始化 jTextArea = new JTextArea(); jTextField= new JTextField(20); sendButton= new JButton("發(fā)送"); 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("聊天服務(wù)器"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置退出按鈕 this.setVisible(true); this.setResizable(true); //下面是socket服務(wù)器的搭建 try { //服務(wù)器監(jiān)聽 ServerSocket ss = new ServerSocket(9988); //等待客戶端連接 Socket socket = ss.accept(); //獲得客戶端發(fā)送過來的數(shù)據(jù)的流 BufferedReader br = new BufferedReader (new InputStreamReader(socket.getInputStream())); printWriter = new PrintWriter(socket.getOutputStream(),true); //讀取從客戶端發(fā)送過來的信息 while(true){ String info = br.readLine(); jTextArea.append("客戶端 "+getTime()+"\r\n"+info+"\r\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 用來獲取當(dāng)前的時間 * @return 當(dāng)前的時間 */ public String getTime(){ //可以對每個單獨時間域進(jìn)行修改 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; } /** * 當(dāng)button被點擊的時候調(diào)用 */ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //當(dāng)按鈕按下的時候調(diào)用 if(e.getActionCommand().equals("send")){ //把服務(wù)器在jTextField寫的內(nèi)容發(fā)送給客戶端 String info= jTextField.getText(); jTextArea.append("服務(wù)器 "+getTime()+"\r\n"+info+"\r\n"); printWriter.println(info); //清楚發(fā)送框內(nèi)容 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; /** * 客戶端的主函數(shù) * */ public static void main(String[] args) { // TODO Auto-generated method stub new MyClient(); } /** * 客戶端構(gòu)造函數(shù)用來初始化 * */ public MyClient(){ //GUI初始化 jTextArea= new JTextArea(); jTextField=new JTextField(20); sendButton= new JButton("發(fā)送"); 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){ //不停的讀取服務(wù)器發(fā)過來的信息 String string=br.readLine(); jTextArea.append("服務(wù)器 "+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(); } } /** * 用來獲取當(dāng)前的時間 * @return 當(dāng)前的時間 */ public String getTime(){ //可以對每個單獨時間域進(jìn)行修改 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; } /** * 當(dāng)button被點擊的時候調(diào)用 */ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(sendButton.getActionCommand().equals("send")){ String info= jTextField.getText(); //將客戶端發(fā)送的信息發(fā)送給服務(wù)端 jTextArea.append("客戶端 "+getTime()+"\r\n"+info+"\r\n"); printWriter.println(info); jTextField.setText(""); } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot使用RabbitMQ實現(xiàn)topic 主題
本篇文章主要介紹了spring boot使用RabbitMQ實現(xiàn)topic 主題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03Springboot在有鎖的情況下正確使用事務(wù)的實現(xiàn)代碼
這篇文章主要介紹了Springboot在有鎖的情況下如何正確使用事務(wù),今天通過一個實驗給大家分析一下商品超賣問題,模擬場景分析通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12java基礎(chǔ)(System.err和System.out)詳解
下面小編就為大家?guī)硪黄猨ava基礎(chǔ)(System.err和System.out)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06使用GenericObjectPool避免泄漏設(shè)置方法
這篇文章主要為大家介紹了使用GenericObjectPool避免泄漏的設(shè)置方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09java模擬ajax訪問另一個項目的controller代碼實例
今天小編就為大家分享一篇關(guān)于java模擬ajax訪問另一個項目的controller代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03jvm細(xì)節(jié)探索之synchronized及實現(xiàn)問題分析
這篇文章主要介紹了jvm細(xì)節(jié)探索之synchronized及實現(xiàn)問題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對象頭的介紹等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11