一對一聊天程序

package untitled1.src;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;public class MyServer extends JFrame{private ServerSocket server; // 服務器套接字private Socket socket; // 客戶端套接字private BufferedReader reader;private PrintWriter writer;// 根據套接字字節流創建的字符輸出流// = new PrintWriter("D:\\word.txt")private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 發送信息的文本框void start() {// 啟動服務器try {server = new ServerSocket(8998); // 服務器啟用8998端口area.append("服務器套接字已經創建成功\n");while (true) {area.append("等待客戶端的連接\n");socket = server.accept(); // 服務器監聽客戶端連接// 根據套接字字節流創建字符輸入流reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream(), true);while (true) {// 循環接受信息String message = reader.readLine();// 讀取一行文本if ("exit".equals(message)) {// 如果客戶端發來的內容為“exit”System.out.println("客戶端退出");break;// 停止接受信息}area.append("客戶端:" + message + "\n");}reader.close(); // 關閉流socket.close(); // 關閉套接字}} catch (IOException e) {e.printStackTrace();}}public MyServer() throws FileNotFoundException {setTitle("向客戶端送數據");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滾動面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 將文本框放在窗體的下部text.addActionListener(new ActionListener() {// 文本框觸發回車事件public void actionPerformed(ActionEvent e) {if (text.getText() != null){writer.println(text.getText().trim()); // 將文本框中的信息寫入流}area.append(text.getText() + '\n'); // 將文本框中的信息顯示在文本域中text.setText(""); // 將文本框清空}});}public static void main(String[] args) throws FileNotFoundException {MyServer tcp = new MyServer();tcp.setSize(500, 300); // 窗體大小tcp.setVisible(true); // 顯示窗體tcp.start(); // 啟動服務器}
}

?

package untitled1.src;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import javax.swing.*;public class MyClient extends JFrame {private BufferedReader reader;private PrintWriter writer;// 根據套接字字節流創建的字符輸出流Socket socket; // 客戶端套接字private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 發送信息的文本框public MyClient() {setTitle("向服務器送數據");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滾動面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 將文本框放在窗體的下部text.addActionListener(new ActionListener() {// 文本框觸發回車事件public void actionPerformed(ActionEvent e) {writer.println(text.getText().trim()); // 將文本框中的信息寫入流area.append(text.getText() + '\n'); // 將文本框中的信息顯示在文本域中text.setText(""); // 將文本框清空}});}private void connect() { // 連接服務器方法area.append("嘗試連接\n"); // 文本域中提示信息try {socket = new Socket("127.0.0.1", 8998); // 連接本地計算機的8998端口writer = new PrintWriter(socket.getOutputStream(), true);reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));area.append("完成連接\n");while (true) {// 循環接受信息String message = reader.readLine();// 讀取一行文本if ("exit".equals(message)) {// 如果服務端發來的內容為“exit”System.out.println("服務端退出");break;// 停止接受信息}area.append("服務器:" + message + "\n");}reader.close(); // 關閉流socket.close(); // 關閉套接字} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {MyClient clien = new MyClient();clien.setSize(500, 300); // 窗體大小clien.setVisible(true); // 顯示窗體clien.connect(); // 連接服務器}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210097.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210097.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210097.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【漏洞復現】華脈智聯指揮調度平臺/xml_edit/fileread.php文件讀取漏洞

Nx01 產品簡介 深圳市華脈智聯科技有限公司,融合通信系統將公網集群系統、專網寬帶集群系統、不同制式、不同頻段的短波/超短波對講、模擬/數字集群系統、辦公電話系統、廣播系統、集群單兵視頻、視頻監控系統、視頻會議系統等融為一體,集成了專業的有線…

第一課【習題】HarmonyOS應用/元服務上架

元服務發布的國家與地區僅限于“中國大陸” 編譯打包的軟件包存放在項目目錄build > outputs > default下 創建應用時,應用包名需要和app.json5或者config.json文件中哪個字段保持一致? 發布應用時需要創建證書,證書類型選擇什么…

web前端實現LED功能、液晶顯示時間、數字

MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 頁面 --><div class"time-box"><!-- 時 --><div class"house-box"><bit-component :num"houseTem"></bit…

編譯器緩存

2023年12月6日&#xff0c;周三晚上 使用編譯器緩存有什么用 編譯器緩存是一種用于加速編譯過程的工具&#xff0c;它可以緩存已編譯的對象文件和依賴關系&#xff0c;以便在后續構建中重復使用。使用編譯器緩存可以帶來以下幾個好處&#xff1a; 加快編譯速度&#xff1a;編譯…

TS型變與對象類型進階

子類型&#xff1a;給定兩個類型A和B&#xff0c;假設B是A的子類型&#xff0c;那么在需要A的地方都可以放心使用B。計作 A <: B &#xff08;A是B的子類型&#xff09;。 超類型正好與子類型相反。A >: B &#xff08;A是B的超類型&#xff09;。 1 TS 類型 可賦值性…

使用cmake構建Qt6.6的qt quick項目,添加應用程序圖標的方法

最近&#xff0c;在學習qt的過程中&#xff0c;遇到了一個難題&#xff0c;不知道如何給應用程序添加圖標&#xff0c;按照網上的方法也沒有成功&#xff0c;后來終于自己摸索出了一個方法。 1、準備一張圖片作為圖標&#xff0c;保存到工程目錄下面&#xff0c;如logo.ico。 …

Qt 編譯fcitx-qt5 插件支持中文輸入法

前言 在Linux系統上會遇到Qt開發的程序無法輸入中文的情況&#xff0c;原因就是因為輸入法框架是采用的fcitx&#xff0c;而不是ibus&#xff0c;Qt默認只支持ibus輸入法框架。在Qt/5.15.2/gcc_64/plugins/platforminputcontexts/路徑下可以看到&#xff0c;只有libibusplatfo…

引入JavaScript文件的5種方式

在HTML文件中&#xff0c;可以使用以下5種方式引入JavaScript文件&#xff1a; 1.內聯方式&#xff08;Inline&#xff09;&#xff1a; 在HTML的<script>標簽中直接編寫JavaScript代碼。 示例&#xff1a; <script>// JavaScript代碼 </script>2.外部文件…

Python Selenium3 簡單操作進行百度搜索

當前環境&#xff1a;Win10 Python3.7 selenium3.141.0&#xff0c;urllib31.26.2 from selenium import webdriver import timeif __name__ __main__:# Chrome 路徑CHROME_PATH rC:\Program Files (x86)\65.0.3312.0\chrome-win32\chrome.exe# ChromeDriver 路徑CHROMEDR…

mybatis的快速入門以及spring boot整合mybatis(二)

需要用到的SQL腳本&#xff1a; CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT ID, 主鍵,name varchar(10) NOT NULL UNIQUE COMMENT 部門名稱,create_time datetime DEFAULT NULL COMMENT 創建時間,update_time datetime DEFAULT NULL COMMENT 修改…

極智芯 | 解讀國產AI算力 靈汐產品矩陣

歡迎關注我的公眾號 [極智視界],獲取我的更多經驗分享 大家好,我是極智視界,本文分享一下 解讀國產AI算力 靈汐產品矩陣。 邀您加入我的知識星球「極智視界」,星球內有超多好玩的項目實戰源碼和資源下載,鏈接:https://t.zsxq.com/0aiNxERDq [系列聲明:最近寫了十余篇 &…

低多邊形建筑3D模型紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

基于SSM的鞍山職業技術學院圖書借閱管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于SSM的鞍山職業技術學院圖書借閱管理…

樹莓派CSI攝像頭在新系統(23年12月)中的不用設置了,沒有開關,也沒有raspistill

網上都是老信息&#xff0c;用的raspistill命令&#xff0c;至少新系統沒有這個東西了&#xff0c;也不會在sudo raspi-config里面也沒有攝像頭的開關了。 ls /dev/video* 能看到攝像頭video0&#xff0c;但是vcgencmd get_camera supported0&#xff0c; detected0&#xff0…

【python】閉包和裝飾器

前置知識&#xff1a; 函數的本質就是變量名可以把函數作為參數傳遞&#xff0c;例如&#xff1a; def func():print("我是func")# 接收的fn是個函數 def handle(fn): # 調用函數fn()handle(func)可以把函數作為返回值返回&#xff0c;例如 def func():def func2(…

CPU的三大調度

計算機系統中的調度可以分為不同層次&#xff0c;包括作業調度、內存調度和進程調度。這三種調度分別負責管理和優化計算機系統中不同層次的資源分配和執行順序。 高級調度&#xff1a;作業調度&#xff08;Job Scheduling&#xff09;&#xff1a; 作業調度是指對提交到計算…

了解c++11中的新增

一&#xff0c;統一的初始化列表 在引入c11后&#xff0c;我們得出計劃都可以用初始化列表進行初始化。 C11 擴大了用大括號括起的列表 ( 初始化列表 ) 的使用范圍&#xff0c;使其可用于所有的內置類型和用戶自 定義的類型&#xff0c; 使用初始化列表時&#xff0c;可添加等…

Vue學習計劃-Vue2--VueCLi(二)vuecli腳手架創建的項目內部主要文件分析

1. 文件分析 1. 補充&#xff1a; 什么叫單文件組件&#xff1f; 一個文件中只有一個組件 vue-cli創建的項目中&#xff0c;.vue的文件都是單文件組件&#xff0c;例如App.vue 2. 進入分析 1. package.json: 項目依賴配置文件&#xff1a; 如圖&#xff0c;我們說主要的屬性…

性能測試經典面試題(帶答案)!

概述一下性能測試流程&#xff1f; 1.分析性能需求。挑選用戶使用最頻繁的場景來測試。確定性能指標&#xff0c;比如&#xff1a;事務通過率 為100%&#xff0c;TOP99%是5秒&#xff0c;最大并發用戶為1000人&#xff0c;CPU和內存的使用率在70%以下2.制定性能測試計劃&…

Ubuntu20.04使用cephadm部署ceph集群

文章目錄 Requirements環境安裝Cephadm部署Ceph單機集群引導&#xff08;bootstrap&#xff09;建立新集群 管理OSD列出可用的OSD設備部署OSD刪除OSD 管理主機列出主機信息添加主機到集群從集群中刪除主機 部署Ceph集群 Cephadm通過在單個主機上創建一個Ceph單機集群&#xff0…