Java聊天室之實現(xiàn)接收和發(fā)送Socket
一、題目描述
題目實現(xiàn):網(wǎng)絡通信,實現(xiàn)信息的發(fā)送和接收。
二、解題思路
創(chuàng)建一個服務器類:ServerSocketFrame,繼承JFrame類
寫一個getserver() 方法,實例化Socket對象,啟用9527當服務的端口。
創(chuàng)建輸入流對象,用來接收客戶端信息。
再定義一個getClientInfo()方法,用于接收客戶端發(fā)送的信息。
創(chuàng)建一個客戶端類:ClientSocketFrame,繼承JFrame類。
寫一個connect() 方法,實例化Socket對象,連接本地服務的9527端口服務。
技術重點:
通過Socket類的getInpuStream()方法來獲得輸入流對象,使用getOutputStream()方法獲得輸出流對象實現(xiàn)。
三、代碼詳解
ServerSocketFrame
package com.xiaoxuzhu; import java.awt.BorderLayout; import java.io.*; import java.net.*; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * Description: * * @author xiaoxuzhu * @version 1.0 * * <pre> * 修改記錄: * 修改后版本 修改人 修改日期 修改內(nèi)容 * 2022/6/4.1 xiaoxuzhu 2022/6/4 Create * </pre> * @date 2022/6/4 */ public class ServerSocketFrame extends JFrame { private JTextArea ta_info;// 聲明文本域,用于顯示連接信息和接收到的信息 private BufferedReader reader; // 聲明BufferedReader對象 private ServerSocket server; // 聲明ServerSocket對象 private Socket socket; // 聲明Socket對象socket public void getServer() { try { server = new ServerSocket(9527); // 實例化Socket對象 ta_info.append("服務器套接字已經(jīng)創(chuàng)建成功\n"); // 輸出信息 while (true) { // 如果套接字是連接狀態(tài) ta_info.append("等待客戶機的連接......\n"); // 輸出信息 socket = server.accept(); // 實例化Socket對象 ta_info.append("連接成功。\n"); // 輸出信息 reader = new BufferedReader(new InputStreamReader(socket .getInputStream())); // 實例化BufferedReader對象 getClientInfo(); // 調(diào)用getClientInfo()方法 } } catch (Exception e) { e.printStackTrace(); // 輸出異常信息 } } private void getClientInfo() { try { while (true) { // 如果套接字是連接狀態(tài) ta_info.append("接收到客戶機發(fā)送的信息:" + reader.readLine() + "\n"); // 獲得客戶端信息 } } catch (Exception e) { ta_info.append("客戶端已退出。\n"); // 輸出異常信息 } finally { try { if (reader != null) { reader.close();// 關閉流 } if (socket != null) { socket.close(); // 關閉套接字 } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // 主方法 ServerSocketFrame frame = new ServerSocketFrame(); // 創(chuàng)建本類對象 frame.setVisible(true); frame.getServer(); // 調(diào)用方法 } public ServerSocketFrame() { super(); setTitle("服務器端程序"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 336, 257); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); } }
ClientSocketFrame
package com.xiaoxuzhu; import java.awt.*; import java.awt.BorderLayout; import java.awt.event.*; import java.io.*; import java.net.*; import javax.swing.*; import javax.swing.JScrollPane; /** * Description: * * @author xiaoxuzhu * @version 1.0 * * <pre> * 修改記錄: * 修改后版本 修改人 修改日期 修改內(nèi)容 * 2022/6/4.1 xiaoxuzhu 2022/6/4 Create * </pre> * @date 2022/6/4 */ public class ClientSocketFrame extends JFrame { // 創(chuàng)建類繼承JFrame類 private PrintWriter writer; // 聲明PrintWriter類對象 private Socket socket; // 聲明Socket對象 private JTextArea ta_info = new JTextArea(); // 創(chuàng)建JtextArea對象 private JTextField tf_send = new JTextField(); // 創(chuàng)建JtextField對象 private Container cc; // 聲明Container對象 public ClientSocketFrame() { // 構造方法 super(); // 調(diào)用父類的構造方法 setTitle("客戶端程序"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 351, 257); cc = this.getContentPane(); // 實例化對象 cc.add(tf_send, "South"); // 將文本框放在窗體的下部 tf_send.addActionListener(new ActionListener() { // 綁定事件 public void actionPerformed(ActionEvent e) { writer.println(tf_send.getText()); // 將文本框中信息寫入流 ta_info.append("客戶端發(fā)送的信息是:" + tf_send.getText() + "\n"); // 將文本框中信息顯示在文本域中 tf_send.setText(""); // 將文本框清空 } }); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(ta_info); } private void connect() { // 連接套接字方法 ta_info.append("嘗試連接......\n"); // 文本域中信息信息 try { // 捕捉異常 socket = new Socket("127.0.0.1", 9527); // 實例化Socket對象 writer = new PrintWriter(socket.getOutputStream(), true);// 創(chuàng)建輸出流對象 ta_info.append("完成連接。\n"); // 文本域中提示信息 } catch (Exception e) { e.printStackTrace(); // 輸出異常信息 } } public static void main(String[] args) { // 主方法 ClientSocketFrame clien = new ClientSocketFrame(); // 創(chuàng)建本例對象 clien.setVisible(true); // 將窗體顯示 clien.connect(); // 調(diào)用連接方法 } }
服務端啟動
客戶端啟動
客戶端發(fā)送信息
服務端接收信息
以上就是Java聊天室之實現(xiàn)接收和發(fā)送Socket的詳細內(nèi)容,更多關于Java聊天室的資料請關注腳本之家其它相關文章!
相關文章
IDEA-SpringBoot項目Debug啟動不了(卡住不動)的原因分析
這篇文章主要介紹了IDEA-SpringBoot項目Debug啟動不了(卡住不動)的原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Spring整合Mybatis使用<context:property-placeholder>時的坑
這篇文章主要介紹了Spring整合Mybatis使用<context:property-placeholder>時的坑 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06