JAVA基础知识:网络编程

发布时间:2023年12月20日

????????网络编程是现代软件开发中不可或缺的一部分,它使得我们能够通过网络连接和交互,实现数据传输和通信。Java作为一种广泛应用于网络编程的编程语言,提供了丰富的库和工具,使得开发者能够轻松地构建强大的网络应用程序。本文将详细介绍Java网络编程的基础知识,包括套接字、TCPUDP协议、客户端和服务器端编程等,并提供相关示例代码,帮助读者快速上手。

一、套接字(Socket):连接的基石

????????在Java网络编程中,套接字(Socket)是实现网络通信的基本构建块。套接字提供了一种机制,使得不同主机上的进程能够通过网络进行通信。Java提供了java.net包,其中的Socket类和ServerSocket类分别用于客户端和服务器端的套接字编程。

示例代码:

// 客户端代码
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("服务器IP地址", 12345);

            // 发送数据
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println("Hello, Server!");
            writer.flush();

            // 接收数据
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String response = reader.readLine();
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 服务器端代码
import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(12345);
            System.out.println("Server started, waiting for client...");

            Socket socket = serverSocket.accept();
            System.out.println("Client connected.");

            // 接收数据
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String request = reader.readLine();
            System.out.println("Client request: " + request);

            // 发送数据
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println("Hello, Client!");
            writer.flush();

            // 关闭连接
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、TCPUDP协议:可靠与高效之间的抉择

????????在网络编程中,TCPUDP是两种常用的传输协议。TCP协议提供可靠的、面向连接的数据传输,而UDP协议则提供不可靠的、无连接的数据传输。Java网络编程中可以使用SocketServerSocket类来实现TCP协议的通信,使用DatagramSocketDatagramPacket类来实现UDP协议的通信。

TCP通信示例代码:

// TCP客户端代码
import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("服务器IP地址", 12345);

            // 发送数据
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println("Hello, Server!");
            writer.flush();

            // 接收数据
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String response = reader.readLine();
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
// TCP服务器端代码
import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(12345);
            System.out.println("Server started, waiting for client...");

            Socket socket = serverSocket.accept();
            System.out.println("Client connected.");

            // 接收数据
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String request = reader.readLine();
            System.out.println("Client request: " + request);

            // 发送数据
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(outputStream);
            writer.println("Hello, Client!");
            writer.flush();

            // 关闭连接
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

UDP通信示例代码:

// UDP客户端代码
import java.io.*;
import java.net.*;

public class UDPClient {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket();

            // 发送数据
            String message = "Hello, Server!";
            byte[] sendData = message.getBytes();
            InetAddress serverAddress = InetAddress.getByName("服务器IP地址");
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, 12345);
            socket.send(sendPacket);

            // 接收数据
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
// UDP服务器端代码
import java.io.*;
import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try {
            DatagramSocket socket = new DatagramSocket(12345);
            System.out.println("Server started, waiting for client...");

            // 接收数据
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            String request = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Client request: " + request);

            // 发送数据
            String message = "Hello, Client!";
            byte[] sendData = message.getBytes();
            InetAddress clientAddress = receivePacket.getAddress();
            int clientPort = receivePacket.getPort();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
            socket.send(sendPacket);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

文章来源:https://blog.csdn.net/aidscooler/article/details/135076139
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。