Java--1v1雙向通信-控制臺版

文章目錄

  • 前言
  • 客戶端
  • 服務器端
  • 輸出線程端
  • End

前言


TCP(Transmission Control Protocol)是一種面向連接的、可靠的網絡傳輸協議,它提供了端到端的數據傳輸和可靠性保證。

本程序就是基于tcp協議編寫而成的。

利用 TCP 協議進行通信的兩個應用程序是有主次之分的,一個稱為服務器程序,另一個稱為客戶機程序,兩者的功能和編寫方法大不一樣。

代碼結構圖
在這里插入圖片描述




客戶端

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Scanner in = new Scanner(System.in);// 發送數據// 創建 Socket對象// 創建對象時會連接服務器,如果連接不上會報錯// 127.0.0.1 代表本機地址Socket socket = new Socket("127.0.0.1", 11451);MyThread thread = new MyThread();OutputStream os = socket.getOutputStream();while (true) {if (thread.getState() == Thread.State.NEW) {thread.setName("蕪湖");thread.setSocket(socket);thread.start();}String str = in.next();os.write(str.getBytes());if ("886".equals(str)) {socket.shutdownOutput();break;}}System.out.println("主線程退出");in.close();os.close();socket.close();}
}



服務器端


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class Server {public static void main(String[] args) throws IOException, InterruptedException {Scanner in = new Scanner(System.in);// 接收數據// 創建ServerSocket對象ServerSocket ss = new ServerSocket(11451);  // 獲取指定端口的數據MyThread thread = new MyThread();Socket socket = ss.accept();// 監聽客戶端的連接,獲取連接OutputStream os = socket.getOutputStream(); // 獲取輸出流while (true) {// 判斷該線程是否啟動if (thread.getState() == Thread.State.NEW) {thread.setName("呀呼");thread.setSocket(socket);thread.start();}// 從連接通道中獲取輸出流// 寫出數據String str = in.next();os.write(str.getBytes());// 結束if ("886".equals(str)) {socket.shutdownOutput();break;}}System.out.println("主線程退出");in.close();os.close();socket.close();ss.close();}
}



輸出線程端


import java.io.*;
import java.net.Socket;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class MyThread extends Thread {Socket socket;public void setSocket(Socket socket) {this.socket = socket;}@Overridepublic void run() {while (true) {BufferedInputStream isr = null;   // 獲取輸出流try {isr = new BufferedInputStream(socket.getInputStream());int len;byte[] bytes = new byte[1024];while ((len = isr.read(bytes)) != -1) {String target = new String(bytes, 0, len);// 獲取當前時間LocalDateTime dateTime = LocalDateTime.now(); // get the current date and time// 按照相應格式解析DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-dd-MM HH:mm:ss");// 輸出當前時間System.out.println(dateTime.format(formatter));// 輸出對方傳輸的內容System.out.println(getName()+":"+target);}} catch (IOException e) {break;}}System.out.println(getName()+"輸出線程退出");}
}

End

此代碼我已經測試過可以實現最初的無線數據傳輸,客戶端運行在一個電腦上,服務器端運行在另一臺電腦上,這時只需要將客戶端的目標ip地址改為服務器端電腦的ip地址(如果不知到如何查詢,win+r -> cmd->ipconfig,就可以看到自己電腦的IPv4 地址)。

需要注意的是,當時的測試環境是兩臺電腦處于同一個WiFi熱點下進行的。

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

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

相關文章

HarmonyOS(鴻蒙操作系統)與Android系統 各自特點 架構對比 各自優勢

綜合對比 HarmonyOS(鴻蒙操作系統)是由華為開發的操作系統,旨在跨多種設備和平臺使用。HarmonyOS的架構與谷歌開發的廣泛使用的Android操作系統有顯著不同。以下是兩者之間的一些主要比較點: 設計理念和使用案例: Harm…

go語言 grpc 攔截器

文章目錄 攔截器服務端攔截器一元攔截器流攔截器 客戶端攔截器一元攔截器流攔截 多個攔截器 代碼倉庫 攔截器 gRPC攔截器(interceptor)是一種函數,它可以在gRPC調用之前和之后執行一些邏輯,例如認證、授權、日志記錄、監控和統計…

iOS app切換后臺時添加模糊遮罩層

仿 支付寶 退出后臺后,App整個 增加模糊遮罩層 此處只介紹 在iOS13后 SceneDelegate 下的操作 原理就是 在 App 進入后臺后 在 主window上添加一個 UIVisualEffectView 在進入前臺后移除 直接上代碼: 先聲明: //先聲明 /* blurView */ property (strong, nonatomic) UI…

逆波蘭表達式求解計算器

利用逆波蘭表達式求解計算器有以下幾個步驟: 1. 去掉字符串中的空格 s s.replaceAll(" ", "")2. 講字符串轉換為中序表達式數組 def string_to_infixlist(s):ans []keep_num ""for i in range(len(s)):if s[i].isdigit():if i < len(s)…

docker學習(四、修改容器創建新的鏡像推送到云上)

鏡像是只讀的&#xff0c;容器是可編輯的。Docker鏡像是分層的&#xff0c;支持通過擴展鏡像&#xff0c;創建新的鏡像。 學到這里感覺docker跟git很想~~ 通過docker commit將修改的容器做成新的鏡像 # 將容器做成新的鏡像 docker commit -m"提交備注" -a"作…

【1day】泛微e-office OA系統sms_page.php接口SQL 注入漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現

大創項目推薦 交通目標檢測-行人車輛檢測流量計數 - 大創項目推薦

文章目錄 0 前言1\. 目標檢測概況1.1 什么是目標檢測&#xff1f;1.2 發展階段 2\. 行人檢測2.1 行人檢測簡介2.2 行人檢測技術難點2.3 行人檢測實現效果2.4 關鍵代碼-訓練過程 最后 0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 畢業設計…

什么是Nginx反向代理?Nginx反向代理配置指南

Nginx反向代理是一種常見的服務器架構模式&#xff0c;它可以將客戶端請求轉發到多個后端服務器上&#xff0c;從而實現負載均衡、高可用性和安全性。本文將介紹Nginx反向代理的基本概念和配置方法。 什么是Nginx反向代理&#xff1f; 在傳統的Web服務器架構中&#xff0c;客戶…

解決selenium使用.get()報錯:unknown error: unsupported protocol

解決方法 將原來的&#xff1a; url "https://www.baidu.com" browser.get(url)替換為&#xff1a; url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()問題解析 之前運行都是正…

【后端學前端學習記錄】學習計劃

1、個人背景 寫了足夠久的后端了&#xff0c;常用的語言基本上都接觸過&#xff0c;沒有在工作中寫過前端 一直想做一些前端的工作&#xff0c;但是前端技能不足加上自己審美不行&#xff0c;寫出的界面總是很丑 所以一直對前端做不好&#xff0c;也沒有真正下手。 2、動機 種…

Navicat 技術指引 | 連接 GaussDB 分布式

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結…

SLAM ORB-SLAM2(11)單目初始化

SLAM ORB-SLAM2(11)單目初始化 1. 初始化工作1.1. 單應矩陣(Homography Matrix)1.2. 基礎矩陣(Fundamental Matrix)1.3. 本質矩陣(Essential Matrix)1.4. 初始化過程2. 業務流程2.1. 創建單目初始化器2.2. 判斷連續幀的特征點數目2.3. 在兩幀中找匹配的特征點對2.4. 估…

軟件兼容性測試:保障多樣化用戶體驗的重要功能

隨著移動設備和操作系統的快速發展&#xff0c;軟件兼容性測試變得越發重要。這項測試確保軟件在不同平臺、設備和環境下都能夠正常運行&#xff0c;提供一致而穩定的用戶體驗。下面是軟件兼容性測試中的一些關鍵功能&#xff1a; 1. 跨平臺兼容性測試 在不同操作系統上運行的軟…

【flink番外篇】1、flink的23種常用算子介紹及詳細示例(3)-window、distinct、join等

Flink 系列文章 一、Flink 專欄 Flink 專欄系統介紹某一知識點&#xff0c;并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分&#xff0c;比如術語、架構、編程模型、編程指南、基本的…

macOS Big Sur/Mac電腦安裝vscode顯示您沒有權限來打開應用程序‘Visual Studio Code‘ 請聯系您的電腦或網絡管理員問題修復

錯誤方法 首先我以為我的權限不足。&#xff0c;需要去用戶群組里設置。結果根本不是這個的問題。 1.在系統偏好設置->用戶與群組檢查了一下我的用戶是不是管理員 結果發現是管理員 2.根據蘋果提示&#xff0c;右鍵我的文件夾->顯示簡介->最下面的共享與權限 解鎖&…

SAP UI5 walkthrough step5 Controllers

在這個章節&#xff0c;我們要做的是&#xff0c;將之前的text文本展示為一個按鈕&#xff0c;并將聲明綁定在點擊按鈕事件。 因為改的是外觀&#xff0c;所以我們修改的是view.XML webapp/view/App.view.xml <mvc:ViewcontrollerName"ui5.walkthrough.controller.A…

element中el-select多選v-model是對象數組

文章目錄 一、問題二、解決三、最后 一、問題 element中的el-select的v-model一般都是字符串或者字符串數組&#xff0c;但是有些時候后端接口要求該字段要傳對象或者對象數組&#xff0c;如果再轉換一次數據&#xff0c;對于保存配置和回顯都是吃力不討好的事情。如下所示&am…

SpringBoot 項目將jar 部署在服務器引用外部 配置文件

SpringBoot 官方給出了四種方式引用外部配置文件的方式 在jar包的同一目錄下建一個config文件夾&#xff0c;然后把配置文件放到這個文件夾下(最常用)直接把配置文件放到jar包的同級目錄在classpath下建一個config文件夾&#xff0c;然后把配置文件放進去在classpath下直接放配…

圖片整理

Lily上課時使用字母數字圖片教小朋友們學習英語單詞&#xff0c;每次都需要把這些圖片按照大小&#xff08;ASCII碼值從小到大&#xff09;排列收好。請大家給Lily幫忙&#xff0c;通過代碼解決。 Lily使用的圖片使用字符"A"到"Z"、“a"到"z”、…

centos7做gitlab數據災備項目地址指向問題

如果你在 CentOS 7 上使用 GitLab 時&#xff0c;它回復的數據指向了另一個服務器的地址&#xff0c;可能是因為配置文件中的一些設置不正確。 要解決這個問題&#xff0c;可以嘗試以下幾個步驟&#xff1a; 檢查 GitLab 配置文件&#xff1a;打開 GitLab 的配置文件&#xf…