每日英文
What is adhere to? Is day, and one day, you tell yourself, insist again one day.
什么是坚持?就是一天,又一天,你告诉自己,再坚持一天。
每日掏心话
不要沉迷过去,不要害怕未来,过去。得失也好,成败也罢,无论快乐,还是痛苦,都过去了,你只能回忆,而无法回去。
责编:乐乐 | 来自:Java葵花宝典
链接:https://blog.csdn.net/2202_76097976/article/details/141562862
往日回顾:一款免费开源、业务闭环、灵活稳定的企业级 ERP 系统,实现财务一体化!
正文
Java 作为一门功能强大的编程语言,不仅在桌面应用、移动开发、后端开发等领域表现出色,还在网络编程中拥有广泛的应用。网络编程涉及在两个或多个设备之间通过网络进行通信,这对于构建分布式系统、客户端-服务器应用程序、以及互联网服务至关重要。在这篇文章中,我们将详细探讨 Java 网络编程的基础知识,并通过代码示例展示如何在 Java 中实现网络通信。
Java 网络编程主要基于 java.net 包,该包提供了处理网络操作的类和接口。以下是网络编程中几个重要的概念和类:
Socket是 Java 中用于实现客户端和服务器之间通信的基础类。它允许应用程序通过 TCP 或 UDP 协议传输数据。
TCP 是一种可靠的传输协议,适用于需要保证数据完整传输的应用。以下是如何在 Java 中使用 TCP 进行网络编程的示例。
服务器端需要监听一个特定的端口,并等待客户端连接。ServerSocket 类用于在指定的端口上侦听请求。
import java.io.*;import java.net.*;public class TCPServer { public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(8080)) { // 监听8080端口 System.out.println("服务器已启动,等待客户端连接..."); Socket clientSocket = serverSocket.accept(); // 接受客户端连接 System.out.println("客户端已连接"); // 从客户端读取数据 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String clientMessage = in.readLine(); System.out.println("收到客户端消息: " + clientMessage); // 向客户端发送响应 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); out.println("你好,客户端!消息已收到。"); clientSocket.close(); // 关闭连接 } catch (IOException e) { e.printStackTrace(); } }}解释:
ServerSocket serverSocket = new ServerSocket(8080)创建一个服务器套接字,在 8080 端口监听客户端请求。 Socket clientSocket = serverSocket.accept()阻塞式调用,等待客户端连接。 BufferedReader in和 PrintWriter out用于接收和发送数据。
客户端通过 Socket 类连接服务器,并发送消息。
import java.io.*;import java.net.*;public class TCPClient {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 8080)) { // 连接服务器// 向服务器发送数据PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("你好,服务器!");// 接收服务器的响应BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String serverMessage = in.readLine();System.out.println("收到服务器消息: " + serverMessage);} catch (IOException e) {e.printStackTrace();}}}
解释:
Socket socket = new Socket("localhost", 8080)PrintWriter outBufferedReader in 用于接收服务器的响应。UDP 是一种无连接协议,适用于对传输可靠性要求不高的场景,如实时视频或音频传输。以下是如何在 Java 中使用 UDP 进行网络编程的示例。
服务器端使用DatagramSocket 来接收和发送数据包。
import java.net.*;publicclassUDPServer {publicstaticvoidmain(String[] args) {try (DatagramSocketserverSocket=newDatagramSocket(9090)) { // 在9090端口上监听byte[] receiveBuffer = newbyte[1024];DatagramPacketreceivePacket=newDatagramPacket(receiveBuffer, receiveBuffer.length);System.out.println("服务器已启动,等待客户端发送数据...");serverSocket.receive(receivePacket); // 接收数据包StringclientMessage=newString(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到客户端消息: " + clientMessage);// 向客户端发送响应Stringresponse="你好,客户端!消息已收到。";byte[] sendBuffer = response.getBytes();DatagramPacketsendPacket=newDatagramPacket(sendBuffer, sendBuffer.length,receivePacket.getAddress(), receivePacket.getPort());serverSocket.send(sendPacket); // 发送响应} catch (IOException e) {e.printStackTrace();}}}
解释:
DatagramSocket serverSocket = new DatagramSocket(9090)创建一个数据报套接字,在 9090 端口监听。 serverSocket.receive(receivePacket)阻塞式接收数据报文。 DatagramPacket sendPacket用于发送响应数据包。
客户端使用 DatagramSocket 来发送和接收数据包。
import java.net.*;public class UDPClient {public static void main(String[] args) {try (DatagramSocket clientSocket = new DatagramSocket()) {String message = "你好,服务器!";byte[] sendBuffer = message.getBytes();InetAddress serverAddress = InetAddress.getByName("localhost");DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, serverAddress, 9090);clientSocket.send(sendPacket); // 发送数据包byte[] receiveBuffer = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);clientSocket.receive(receivePacket); // 接收响应String serverMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到服务器消息: " + serverMessage);} catch (IOException e) {e.printStackTrace();}}}
解释:
DatagramSocket clientSocket = new DatagramSocket()创建一个数据报套接字。 clientSocket.send(sendPacket)发送数据包到服务器。 clientSocket.receive(receivePacket)阻塞式接收服务器的响应数据包。
在实际应用中,服务器通常需要同时处理多个客户端的请求。我们可以使用多线程技术为每个客户端连接创建一个独立的线程,从而实现并发处理。
import java.io.*;import java.net.*;public class MultiThreadedServer {public static void main(String[] args) {try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("服务器已启动,等待客户端连接...");while (true) {Socket clientSocket = serverSocket.accept();new ClientHandler(clientSocket).start(); // 为每个客户端启动一个新线程}} catch (IOException e) {e.printStackTrace();}}}class ClientHandler extends Thread {private Socket clientSocket;public ClientHandler(Socket socket) {this.clientSocket = socket;}@Overridepublic void run() {try {BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);String clientMessage;while ((clientMessage = in.readLine()) != null) {System.out.println("收到客户端消息: " + clientMessage);out.println("服务器响应: " + clientMessage);}} catch (IOException e) {e.printStackTrace();} finally {try {clientSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
解释:
new ClientHandler(clientSocket).start()为每个客户端启动一个新线程。 ClientHandler类继承自 Thread类,并覆盖run方法处理客户端请求。
客户端代码与之前的 TCP 客户端代码相同,只需稍作调整即可与多线程服务器通信。
Java 网络编程为我们提供了强大的工具来实现客户端和服务器之间的通信。通过理解 TCP 和 UDP 协议的不同特性,并学会使用 Java 中的 Socket、ServerSocket、DatagramSocket等类,我们可以构建可靠且高效的网络应用程序。无论是简单的单线程服务器,还是能够处理多个客户端连接的多线程服务器,Java 都提供了灵活的解决方案。掌握这些基础知识和技巧,对于开发现代网络应用至关重要。
为了跟上AI时代我干了一件事儿,我创建了一个知识星球社群:ChartGPT与副业。想带着大家一起探索ChatGPT和新的AI时代。
有很多小伙伴搞不定ChatGPT账号,于是我们决定,凡是这三天之内加入ChatPGT的小伙伴,我们直接送一个正常可用的永久ChatGPT独立账户。
不光是增长速度最快,我们的星球品质也绝对经得起考验,短短一个月时间,我们的课程团队发布了8个专栏、12个副业项目:
PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。在这里,我为大家准备了一份2021年最新最全BAT等大厂Java面试经验总结。
别找了,想获取史上最简单的Java大厂面试题学习资料
扫下方二维码回复「面试」就好了
猜你还想看
牛逼啊!接私活必备的 400 个开源项目!赶快收藏吧(附源码合集)!
Element Plus二次开发而成后台管理系统,简洁实用美观大方!
老牌知名解压缩软件 7-Zip,时隔近一年更新,仅1.5MB
嘿,你在看吗?