這篇文章主要介紹了java 中模擬TCP傳輸的客戶端和服務端實例詳解的相關資料,需要的朋友可以參考下
一、創建TCP傳輸的客戶端
1、建立TCP客戶端的Socket服務,使用的是Socket物件,建議該物件一建立就明確目的地,也就是要連接的主機;
2、如果連接建立成功,表示資料傳輸通道已建立,該通道就是Socket流,是底層建立好的,既然是流,說著這裡既有輸入流,又有輸出流,想要輸入流或輸出流對象,可以透過Socket來獲取,可以透過getOutputStream()和 getInputStream()來取得;
3、使用輸出流,將資料寫出;
#4、關閉Socket服務。
import java.io.IOException; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { // 1、创建客户端的Socket服务 Socket socket = new Socket("192.168.1.100", 10002); // 2、获取Socket流中输入流 OutputStream out = socket.getOutputStream(); // 3、使用输出流将指定的数据写出去 out.write("TCP is coming !".getBytes()); // 4、关闭Socket服务 socket.close(); } }
二、建立TCP傳輸的服務端
1、建立TCP服務端的的Socket服務,透過ServerSocket物件;
# 2、服務端必須對外提供一個端口,否則客戶端無法連接;
3、獲取連接過來的客戶端對象;
4、透過客戶端對象來取得Socket流,讀取客戶端發來的資料;
5、關閉資源,關客戶端,關服務端。
import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { // 1、创建客户端对象 ServerSocket ss = new ServerSocket(10002); // 2、获取连接过来的客户端对象 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); // 3、通过Socket对象获取输入流,读取客户端发来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf, 0, len); System.out.println(ip + ":" + text); // 4、关闭资源 s.close(); ss.close(); } }
三、優化TCP傳輸的客戶端和服務端
#在本部分,我們將前兩部分的內容進行最佳化,實現TCP傳輸模式下的客戶端和服務端的互動功能。
/** *优化TCP传输的客户端 */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class ClientUpdate { public static void main(String[] args) throws IOException { Socket socket = new Socket("192.168.1.100", 10002); OutputStream out = socket.getOutputStream(); out.write("tcp!".getBytes()); // 读取服务端返回的数据,使用Socket读取流 InputStream in = socket.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf, 0, len); System.out.println(text); socket.close(); } }
/** *优化TCP传输的服务端 */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerUpdate { public static void main(String[] args) throws IOException { // 1、创建服务端对象 ServerSocket ss = new ServerSocket(10002); // 2、获取连接过来的客户端对象 Socket s = ss.accept(); //accept方式为阻塞式方法 String ip = s.getInetAddress().getHostAddress(); // 3、通过Socket对象获取输入流,要读取客户端发来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf, 0, len); System.out.println(ip + ":" + text); // 使用客户端的Socket对象的输出流给客户端返回数据 OutputStream out = s.getOutputStream(); out.write("收到".getBytes()); s.close(); ss.close(); } }
四、建立英文大寫轉換伺服器
應用TCP(Transmission Control Protocol,傳輸控制協定)的相關性質,建立一個基於TCP傳輸下的英文大寫轉換伺服器,要求:客戶端輸入字母數據,發送給服務端;服務端收到數據後顯示在控制台,並將該數據轉成大寫字母傳回給客戶端;直到客戶端輸入「over」為止,轉換結束。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TransClient { public static void main(String[] args) throws IOException { /** * 思路:创建客户端 * 1、创建Socket客户端对象 * 2、获取键盘录入的数据 * 3、将录入的信息发送给Socket输出流 * 4、读取服务端的数据并返回的大写数据 */ // 1、创建Socket客户端对象 Socket s = new Socket("192.168.1.100", 10004); // 2、获取键盘录入 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); // 3、Socket输出流 PrintWriter out = new PrintWriter(s.getOutputStream(), true); // 4、Socket输入流,读取服务端的数据并返回的大写数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while ((line = bufr.readLine()) != null) { if ("over".equals(line)) break; out.println(line); // 读取服务端返回的一行大写数据 String upperStr = bufIn.readLine(); System.out.println(upperStr); } s.close(); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TransServer { public static void main(String[] args) throws IOException { /** * 思路:创建服务端 * 1、创建SeverSocket客户端对象 * 2、获取Socket流 * 3、通过Socket, 读取客户端发过来的需要转换的数据 * 4、显示在控制台上 * 5、将数据转换成大写返回给客户端 */ // 1、创建SeverSocket对象 ServerSocket ss = new ServerSocket(10004); // 2、获取Socket对象 Socket s = ss.accept(); // 获取IP地址 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip + "......connected"); // 3、获取Socket读取流,并装饰 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); // 4、获取Socket的输出流,并装饰 PrintWriter out = new PrintWriter(s.getOutputStream(), true); String line = null; while ((line = bufIn.readLine()) != null) { System.out.println(line); out.println(line.toUpperCase()); } s.close(); ss.close(); } }
以上是詳解java中模擬TCP傳輸的客戶端和服務端實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。

Java的平台獨立性是指編寫的代碼可以在任何安裝了JVM的平台上運行,無需修改。 1)Java源代碼編譯成字節碼,2)字節碼由JVM解釋執行,3)JVM提供內存管理和垃圾回收功能,確保程序在不同操作系統上運行。

Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

云计算显著提升了Java的平台独立性。1)Java代码编译为字节码,由JVM在不同操作系统上执行,确保跨平台运行。2)使用Docker和Kubernetes部署Java应用,提高可移植性和可扩展性。

Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

容器化技術如Docker增強而非替代Java的平台獨立性。 1)確保跨環境的一致性,2)管理依賴性,包括特定JVM版本,3)簡化部署過程,使Java應用更具適應性和易管理性。

JRE是Java應用程序運行的環境,其作用是讓Java程序在不同操作系統上運行無需重新編譯。 JRE的工作原理包括JVM執行字節碼、類庫提供預定義類和方法、配置文件和資源文件設置運行環境。

JVM通過自動內存管理和垃圾回收確保Java程序高效運行。 1)內存分配:為新對像在堆中分配內存。 2)引用計數:跟踪對象引用,檢測垃圾。 3)垃圾回收:使用標記-清除、標記-整理或複制算法回收不再引用的對象。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具