java网络编程

Java 网络编程主要基于 java.net 包,它提供了两种主要的网络通信机制:TCP(面向连接)和 UDP(无连接)。下面为你介绍这两种方式的基本实现。

TCP 网络编程示例

TCP 是一种面向连接的通信协议,提供可靠的数据传输。下面是一个简单的客户端 - 服务器示例:

java

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

public class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8888)) {
            System.out.println("服务器已启动,等待客户端连接...");
            Socket socket = serverSocket.accept(); // 监听并接受客户端连接
            
            // 获取输入流,读取客户端发送的数据
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
            String clientMessage = in.readLine();
            System.out.println("客户端消息: " + clientMessage);
            
            // 获取输出流,向客户端发送响应
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("服务器已收到消息: " + clientMessage);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

public class TCPClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8888)) {
            // 获取输出流,向服务器发送消息
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("Hello, Server!");
            
            // 获取输入流,读取服务器响应
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
            String serverResponse = in.readLine();
            System.out.println("服务器响应: " + serverResponse);
            
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

UDP 网络编程示例

UDP 是一种无连接的通信协议,不保证数据的可靠传输,但效率较高。以下是 UDP 通信的示例:

java

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

public class UDPServer {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket(9999)) {
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            
            // 接收客户端数据
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            
            String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("客户端消息: " + clientMessage);
            
            // 发送响应给客户端
            InetAddress clientAddress = receivePacket.getAddress();
            int clientPort = receivePacket.getPort();
            String response = "服务器已收到消息: " + clientMessage;
            sendData = response.getBytes();
            
            DatagramPacket sendPacket = new DatagramPacket(
                sendData, sendData.length, clientAddress, clientPort);
            socket.send(sendPacket);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

public class UDPClient {
    public static void main(String[] args) {
        try (DatagramSocket socket = new DatagramSocket()) {
            InetAddress serverAddress = InetAddress.getByName("localhost");
            byte[] sendData = new byte[1024];
            byte[] receiveData = new byte[1024];
            
            // 发送数据到服务器
            String message = "Hello, Server!";
            sendData = message.getBytes();
            
            DatagramPacket sendPacket = new DatagramPacket(
                sendData, sendData.length, serverAddress, 9999);
            socket.send(sendPacket);
            
            // 接收服务器响应
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            socket.receive(receivePacket);
            
            String serverResponse = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("服务器响应: " + serverResponse);
            
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

关键类说明

  1. TCP 相关类

    • ServerSocket:用于创建服务器端套接字,监听指定端口。
    • Socket:用于创建客户端套接字,或表示服务器端接受的客户端连接。
    • InputStream/OutputStream:用于读写数据。
  2. UDP 相关类

    • DatagramSocket:用于发送和接收数据报包。
    • DatagramPacket:表示数据报包,包含数据、目标地址和端口等信息。
    • InetAddress:表示 IP 地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值