Java TCP(一對一)聊天簡易版

客戶端

import java.io.*;
import java.net.Socket;
import java.util.Date;
import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;private JPanel jPanel;JScrollPane scroll;MyClient(){jf=new JFrame("客戶端");jBsend =new JButton("發送");jTAcontent =new JTextArea(13,40);jText =new JTextField(12);scroll=new JScrollPane(jTAcontent,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //文本區添加豎直滑動條JLcontent=new JLabel("聊天記錄");jPanel=new JPanel();}public void Win(){Box boxVBox=Box.createVerticalBox();boxVBox.add(JLcontent);boxVBox.add(Box.createVerticalStrut(5));boxVBox.add(scroll);boxVBox.add(Box.createVerticalStrut(10));boxVBox.add(jText);boxVBox.add(Box.createVerticalStrut(10));boxVBox.add(jBsend);boxVBox.add(Box.createVerticalStrut(10));jPanel.add(boxVBox);jf.add(jPanel);jf.setSize(600, 400);jf.setResizable(false);jf.setLocationRelativeTo(null);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void Connect() throws Exception{Socket sk= new Socket("127.0.0.1",1200);jBsend.addActionListener(e->{ //Lambda表達式實現點擊按鈕發送信息   String str=jText.getText(); //獲取文本框內容if (str.matches("\\s+") || str.equals("")) {JOptionPane.showMessageDialog(jf, "不可發送空白內容");return;}try {jTAcontent.append("我:"+str+"\n"); //文本區添加文本框內容BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); //字符流發送信息bw.write(str); //發送文本框的信息給對方bw.newLine(); //發送后換行bw.flush(); //立即發送//不用bw.close(),為了可以一直發送信息jText.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}new Thread(()->{ //Lambda表達式創建線程while(true){ //死循環隨時接受信息try {BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream())); //以字符流接受信息String read = br.readLine(); //一行一行接受信息jTAcontent.append("客服:"+read+"\n");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}).start(); //開啟線程});}public static void main(String[] args) throws Exception {MyClient client=new MyClient();client.Win();client.Connect();}
}

服務端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import javax.swing.*;public class MyServer {//以下是聊天窗口的實現,上一篇文章有說過,不必多說private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;private JPanel jPanel;private JScrollPane scroll;MyServer() { jf = new JFrame("服務端");jBsend = new JButton("發送");jTAcontent = new JTextArea(13, 40);jText = new JTextField(12);scroll = new JScrollPane(jTAcontent, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //文本區添加豎直滑動條JLcontent = new JLabel("聊天記錄");jPanel = new JPanel();}public void Win() {Box boxVBox = Box.createVerticalBox(); //這里應用了垂直盒式布局模式排列組件boxVBox.add(JLcontent);boxVBox.add(Box.createVerticalStrut(5));boxVBox.add(scroll);boxVBox.add(Box.createVerticalStrut(10));boxVBox.add(jText);boxVBox.add(Box.createVerticalStrut(10));boxVBox.add(jBsend);boxVBox.add(Box.createVerticalStrut(10));jPanel.add(boxVBox);jf.add(jPanel);jf.setSize(600, 400);jf.setResizable(false);jf.setLocationRelativeTo(null);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void Connect() throws Exception {ServerSocket ss = new ServerSocket(1200);while (true) {Socket sk = ss.accept();jBsend.addActionListener(e -> { //按鈕響應事件,實現點擊按鈕發送信息String str = jText.getText(); //獲取文本框的內容try {jTAcontent.append("我:" + str + "\n");BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); //以字符流發送信息bw.write(str); //將文本框內容發送給對方bw.newLine(); //發送后換行bw.flush(); //立即發送//不用bw.close(),為了可以一直發送信息} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}jText.setText("");});new Thread(() -> { //開啟線程,這里是為了服務端可同時接收到多個客戶端信息while (true) { //設置死循環,用于隨時接受信息try {BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream())); //字符流方式接受信息String read = br.readLine(); //以字符串方式一行一行接受到信息jTAcontent.append("客戶:" + read + "\n"); //將接收的信息寫入文本區} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}).start(); //用start開啟線程}}public static void main(String[] args) throws Exception {MyServer server = new MyServer();server.Win();server.Connect();}
}

運行結果如下:

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

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

相關文章

C語言 題目

1.寫一個函數算一個數的二進制(補碼)表示中有幾個1 #include<stdio.h>//統計二進制數中有幾個1 //如13:1101 //需要考慮負數情況 如-1 結果應該是32// n 1101 //n-1 1100 //n 1100 //n-1 1011 //n 1000 //n-1 0111 //n 0000 //看n的變化 int funca(int c){int co…

css:flex布局中子元素高度height沒有達到100%

目錄 問題flex布局示例解決辦法方式一方式二 參考 問題 css中使用flex布局中子元素高度height沒有達到100% flex布局示例 希望實現兩個盒子左右分布&#xff0c;內容垂直居中對齊 <style>.box {display: flex;align-items: center;border: 1px solid #eeeeee;}.box-l…

【ceph】ceph生產常見操作之一---ceph擴容以及注意事項

本站以分享各種運維經驗和運維所需要的技能為主 《python零基礎入門》&#xff1a;python零基礎入門學習 《python運維腳本》&#xff1a; python運維腳本實踐 《shell》&#xff1a;shell學習 《terraform》持續更新中&#xff1a;terraform_Aws學習零基礎入門到最佳實戰 《k8…

react新舊生命周期鉤子

以下的內容根據尚硅谷整理。 舊生命鉤子 輔助理解&#xff1a; 紅色框&#xff1a;掛載時生命鉤子藍色框&#xff1a;更新時生命鉤子綠色框&#xff1a;卸載時生命鉤子 掛載時 如圖所示&#xff0c;我們可以看到&#xff0c;在組件第一次掛載時會經歷&#xff1a; 構造器&a…

stateflow——如何查看狀態機中參數變化及狀態機斷點調試

法一&#xff1a;使用Data Inspector 點擊“符號圖窗”和“屬性”&#xff0c;如圖&#xff1b;在選擇變量n并右鍵點擊inspector&#xff0c;最后在logging&#xff0c;如圖 法二&#xff1a;log active state 和法一類似使用data inspector查看&#xff0c;類似的查看方法和…

【每周一測】Java階段四第三周學習

目錄 1、關于分布式鎖的說法&#xff0c;錯誤的是&#xff08; &#xff09; 2、JDK動態代理產生的代理類和委托類的關系是 3、下列關于ElasticSearch中基本概念描述錯誤的是 4、Spring Cloud 中&#xff0c;Feign 是什么&#xff1f; 5、在JavaScript中&#xff0c;可以使…

玩轉大數據13: 數據倫理與合規性探討

1. 引言 隨著科技的飛速發展&#xff0c;數據已經成為了現代社會的寶貴資產。然而&#xff0c;數據的收集、處理和利用也帶來了一系列的倫理和合規性問題。數據倫理和合規性不僅關乎個人隱私和權益的保護&#xff0c;還涉及到企業的商業利益和社會責任。因此&#xff0c;數據…

韻達快遞單號查詢,以表格的形式導出單號的每一條物流信息

批量查詢韻達快遞單號的物流信息&#xff0c;并以表格的形式導出單號的每一條物流信息。 所需工具&#xff1a; 一個【快遞批量查詢高手】軟件 韻達快遞單號若干 操作步驟&#xff1a; 步驟1&#xff1a;運行【快遞批量查詢高手】軟件&#xff0c;第一次使用的伙伴記得先注冊…

SOP(標準作業程序)和WI(操作指導書)的聯系和區別

目錄 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a;2.WI&#xff08;操作指導書&#xff09;&#xff1a;3.SOP和WI的區別&#xff1a; 1.SOP&#xff08;標準作業程序&#xff09;&#xff1a; SOP: 所謂SOP&#xff0c;是 Standard Operation Procedure三個單詞中…

【計算機網絡實驗】實驗三 IP網絡規劃與路由設計(頭歌)

目錄 一、知識點 二、實驗任務 三、頭歌測試 一、知識點 IP子網掩碼的兩種表示方法 32位IP子網掩碼&#xff0c;特點是從高位開始連續都是1&#xff0c;后面是連續的0&#xff0c;它有以下兩種表示方法&#xff1a; 傳統表示法&#xff0c;如&#xff1a;255.255.255.0IP前…

【WebSocket】使用ws搭建一個簡單的在線聊天室

前言 什么是WebSockets&#xff1f; WebSockets 是一種先進的技術。它可以在用戶的瀏覽器和服務器之間打開交互式通信會話。使用此 API&#xff0c;你可以向服務器發送消息并接收事件驅動的響應&#xff0c;而無需通過輪詢服務器的方式以獲得響應。 webscokets 包括webscoket…

中科院分區和JCR分區有什么區別

文章目錄 名詞解釋學科劃分不同參考的影響因子不同期刊分區不同期刊分區閾值不同 名詞解釋 中科院分區&#xff1a;又稱“中科院JCR分區”&#xff0c;是中國科學院文獻情報中心世界科學前沿分析中心的科學研究成果&#xff0c;期刊分區表數據每年底&#xff08;每年12月中下旬…

汽車繼電器

汽車繼電器 電子元器件百科 文章目錄 汽車繼電器前言一、汽車繼電器是什么二、汽車繼電器的類別三、汽車繼電器的應用實例四、汽車繼電器的作用原理總結前言 汽車繼電器作為一種電子設備,廣泛應用于汽車電路中的各種控制和保護任務,能夠可靠地控制和傳送電能,確保汽車系統的…

Python爬蟲-實現批量抓取王者榮耀皮膚圖片并保存到本地

前言 本文是該專欄的第12篇,后面會持續分享python爬蟲案例干貨,記得關注。 本文以王者榮耀的英雄皮膚為例,用python實現批量抓取“全部英雄”的皮膚圖片,并將圖片“批量保存”到本地。具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。注意,這里抓取的圖片…

低代碼:美味膳食或垃圾食品

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。你認為低代碼到底是美味的膳食還是垃圾食品呢&#xff0c;…

ubuntu串口永久權限

ubuntu串口永久權限 臨時打開串口權限 sudo chmod 666 /dev/ttyUSB0該方法只能臨時添加訪問權限&#xff0c;一次性的&#xff0c;下次拔插串口線或者開關機還需要再次賦予串口權限。 永久打開串口權限 首先查看用戶組 ls -l /dev/ttyUSB0終端輸出&#xff1a; crw-rw-rw…

從零開始搭建鏈上dex自動化價差套利程序(11)

風險控制 需要將倉位杠桿控制到3倍以內&#xff0c;由于dydx與apex沒有獲取倉位杠桿的接口&#xff0c;但是每次發送交易的數額可以決定&#xff0c;故而可以設置每次發送總倉位1.5倍杠桿的數額&#xff0c;然后設置一個變量保證每個方向上的交易不超過2次&#xff0c;即可保證…

數據結構和算法-單鏈表

數據結構和算法-單鏈表 1. 鏈表介紹 鏈表是有序的列表&#xff0c;但是它在內存中是存儲如下 圖1 單鏈表示意圖 小結: 鏈表是以節點的方式存儲每個節點包含data域&#xff0c;next域&#xff0c;指向下一個節點。如圖&#xff1a;發現鏈表的各個節點不一定是連續存儲。比如地…

滑動窗口練習(三)— 加油站問題

題目 測試鏈接 在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升。 你有一輛油箱容量無限的的汽車&#xff0c;從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發&#xff0c;開始時油箱為空。 給定兩個整數數組…

如何教會小白使用淘寶API接口獲取商品數據

隨著互聯網的普及&#xff0c;越來越多的人開始接觸網絡購物&#xff0c;而淘寶作為中國最大的電商平臺之一&#xff0c;成為了眾多消費者首選的購物平臺。然而&#xff0c;對于一些小白用戶來說&#xff0c;如何通過淘寶API接口獲取商品數據可能是一個難題。本文將詳細介紹如何…