这篇文章主要介绍了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(); } }
Atas ialah kandungan terperinci 详解java中模拟TCP传输的客户端和服务端实例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Teknologi yang muncul menimbulkan ancaman dan meningkatkan kemerdekaan platform Java. 1) Teknologi pengkomputeran awan dan kontena seperti Docker meningkatkan kemerdekaan platform Java, tetapi perlu dioptimumkan untuk menyesuaikan diri dengan persekitaran awan yang berbeza. 2) WebAssembly menyusun kod Java melalui GraalVM, memperluaskan kemerdekaan platformnya, tetapi ia perlu bersaing dengan bahasa lain untuk prestasi.

Pelaksanaan JVM yang berbeza dapat memberikan kemerdekaan platform, tetapi prestasi mereka sedikit berbeza. 1. OracleHotspot dan OpenJDKJVM melakukan sama seperti kemerdekaan platform, tetapi OpenJDK mungkin memerlukan konfigurasi tambahan. 2. IBMJ9JVM melakukan pengoptimuman pada sistem operasi tertentu. 3. Graalvm menyokong pelbagai bahasa dan memerlukan konfigurasi tambahan. 4. AzulzingJVM memerlukan pelarasan platform tertentu.

Kemerdekaan platform mengurangkan kos pembangunan dan memendekkan masa pembangunan dengan menjalankan set kod yang sama pada pelbagai sistem operasi. Khususnya, ia ditunjukkan sebagai: 1. Mengurangkan masa pembangunan, hanya satu set kod yang diperlukan; 2. Mengurangkan kos penyelenggaraan dan menyatukan proses ujian; 3. Penyebaran cepat dan kerjasama pasukan untuk memudahkan proses penempatan.

Java'splatformindependencefacilitatescodereusebyallowbytytecodetorunonanyplatformWithAjvm.1) DeveloptersCanWriteCodeOnceforconsistentBeHavioracrossplatforms.2)

Untuk menyelesaikan masalah khusus platform dalam aplikasi Java, anda boleh mengambil langkah-langkah berikut: 1. Gunakan kelas sistem Java untuk melihat sifat sistem untuk memahami persekitaran yang sedang berjalan. 2. Gunakan kelas fail atau java.nio.file untuk memproses laluan fail. 3. Muatkan perpustakaan tempatan mengikut keadaan sistem operasi. 4. Gunakan VisualVM atau JProfiler untuk mengoptimumkan prestasi silang platform. 5. Pastikan persekitaran ujian selaras dengan persekitaran pengeluaran melalui kontena Docker. 6. Gunakan githubactions untuk melakukan ujian automatik pada pelbagai platform. Kaedah ini membantu menyelesaikan masalah khusus platform dalam aplikasi Java.

Loader kelas memastikan konsistensi dan keserasian program Java pada platform yang berbeza melalui format fail kelas bersatu, pemuatan dinamik, model delegasi induk dan bytecode bebas platform, dan mencapai kemerdekaan platform.

Kod yang dihasilkan oleh pengkompil Java adalah platform bebas, tetapi kod yang akhirnya dilaksanakan adalah platform khusus. 1. Kod sumber Java disusun ke dalam bytecode bebas platform. 2. JVM menukar bytecode ke dalam kod mesin untuk platform tertentu, memastikan operasi silang platform tetapi prestasi mungkin berbeza.

Multithreading adalah penting dalam pengaturcaraan moden kerana ia dapat meningkatkan respons program dan penggunaan sumber dan mengendalikan tugas serentak yang kompleks. JVM memastikan konsistensi dan kecekapan multithreads pada sistem operasi yang berbeza melalui pemetaan benang, mekanisme penjadualan dan mekanisme kunci penyegerakan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa