当前位置: 首页 > article >正文

网络编程基础:连接Java的秘密网络

1 网络编程的重要性

网络编程允许Java应用程序与其他计算机或设备进行通信。这包括从简单的数据传输到复杂的分布式系统和Web服务。

2 Java网络编程的核心类

Java提供了多个类来支持网络编程:

  • InetAddress:表示网络上的IP地址。

  • URL:表示统一资源定位符,用于访问网络资源。

  • URLConnection:处理从URL指定的网络资源的通信。

  • Socket:用于TCP网络通信。

  • ServerSocket:等待客户端连接的服务器端Socket。

  • DatagramSocket:用于UDP网络通信。

  • DatagramPacket:包含发送或接收数据的UDP数据包。

3 创建客户端-服务器应用

Java网络编程通常涉及创建客户端和服务器应用程序,它们通过Socket进行通信。

示例代码(服务器端)

 
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(6789);
        System.out.println("Server is listening on port 6789");

        try (Socket socket = serverSocket.accept()) {
            InputStreamReader input = new InputStreamReader(socket.getInputStream());
            BufferedReader bufRead = new BufferedReader(input);
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);

            String line;
            while ((line = bufRead.readLine()) != null) {
                System.out.println("Client: " + line);
                output.println("Server: " + line);
            }
        }
    }
}

示例代码(客户端)

 
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 6789);
        InputStreamReader input = new InputStreamReader(socket.getInputStream());
        BufferedReader bufRead = new BufferedReader(input);
        PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(System.in));

        String line;
        while ((line = stdInput.readLine()) != null) {
            output.println(line);
            System.out.println("Server: " + bufRead.readLine());
        }
    }
}

4 UDP通信

UDP是一种无连接的协议,适用于需要快速传输但不一定要求可靠到达的场景。

示例代码(UDP服务器)

 
import java.net.*;

public class UDPServer {
    public static void main(String[] args) throws Exception {
        DatagramSocket serverSocket = new DatagramSocket(9876);
        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

        serverSocket.receive(receivePacket);
        String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("RECEIVED: " + sentence);

        serverSocket.close();
    }
}

示例代码(UDP客户端)

 
import java.net.*;

public class UDPClient {
    public static void main(String[] args) throws Exception {
        DatagramSocket clientSocket = new DatagramSocket();
        String sentence = "Hello from client";
        byte[] buf = sentence.getBytes();
        InetAddress IPAddress = InetAddress.getByName("localhost");

        DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, IPAddress, 9876);
        clientSocket.send(sendPacket);
        clientSocket.close();
    }
}

5 多线程网络服务器

为了处理多个客户端,服务器通常需要使用多线程。

示例代码(多线程服务器)

 
import java.io.*;
import java.net.*;

public class MultiThreadedServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(6789);

        while (true) {
            Socket clientSocket = serverSocket.accept();
            new ClientHandler(clientSocket).start();
        }
    }

    private static class ClientHandler extends Thread {
        private Socket clientSocket;

        public ClientHandler(Socket socket) {
            this.clientSocket = socket;
        }

        public void run() {
            try {
                InputStreamReader input = new InputStreamReader(clientSocket.getInputStream());
                BufferedReader bufRead = new BufferedReader(input);
                PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true);

                String line;
                while ((line = bufRead.readLine()) != null) {
                    System.out.println("Client: " + line);
                    output.println("Server: " + line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    clientSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

6 安全性考虑

网络编程需要考虑安全性,包括使用SSL/TLS加密通信,处理恶意输入等。

通过这一节的学习,你现在应该对Java中的网络编程基础有了深入的理解。网络编程是现代应用程序不可或缺的一部分,它允许程序跨越网络进行通信和数据交换。掌握网络编程,可以帮助你构建复杂的分布式系统和网络应用。


http://www.kler.cn/a/469351.html

相关文章:

  • 手搓一个ChatUI需要分几步
  • 提示词工程教程:提示词安全
  • 在K8S中,如何查看kubelet组件的日志?
  • 【模型】Qwen2-VL 服务端UI
  • 【服务器常见网络攻击】
  • 基于Arduino的FPV头部追踪相机系统
  • PHP进阶-php文件读取与连接数据库基础部分
  • redis相关概念介绍
  • phpStorm环境配置与应用
  • C# 设计模式(行为型模式):模板方法模式
  • PHP7和PHP8的最佳实践
  • k8s中,Containerd运行时与Dockerd运行时区别
  • githu报错:ssh: connect to host github.com port 22: Connection timed out
  • 我用Ai学Android Jetpack Compose之Composable函数
  • jenkins入门4 --window执行execute shell
  • 《量子比特:解锁人工智能并行计算加速的密钥》
  • dfs复习
  • 我用AI学Android Jetpack Compose之入门篇(1)
  • unity 播放 序列帧图片 动画
  • 【0379】Postgres内核 walreceiver (libpqwalreceiver API)分析