引言

网络编程是计算机科学中一个非常重要的领域,它允许不同的计算机系统之间进行通信和数据交换。Java作为一种跨平台的语言,在网络编程方面有着广泛的应用。本文将带领读者从零基础开始,逐步深入Java网络编程的世界,并通过实战案例构建一个实时应用。

Java网络编程基础

1. Java网络编程概述

Java网络编程主要依赖于Java的java.net包,它提供了丰富的类和接口,用于实现网络通信。这些类包括InetAddressSocketServerSocket等。

2. 网络通信模型

Java网络编程主要基于TCP/IP协议,它采用客户端-服务器模型。客户端主动发起连接,服务器被动监听连接请求。

3. InetAddress类

InetAddress类用于获取IP地址。它提供了静态方法getByName(String host),可以根据主机名获取IP地址。

InetAddress address = InetAddress.getByName("www.example.com");
System.out.println(address.getHostAddress());

Socket编程

1. Socket概述

Socket是网络通信的基本单元,它由IP地址和端口号组成。Java中的Socket类用于创建客户端和服务器端的连接。

2. 客户端Socket

客户端Socket通过Socket(String host, int port)构造函数创建,其中host是服务器地址,port是服务器端口号。

Socket socket = new Socket("localhost", 1234);

3. 服务器端Socket

服务器端Socket通过ServerSocket(int port)构造函数创建,并使用accept()方法等待客户端连接。

ServerSocket serverSocket = new ServerSocket(1234);
Socket socket = serverSocket.accept();

实时应用构建

1. 实时聊天应用

以下是一个简单的实时聊天应用示例,它允许两个用户通过服务器进行实时通信。

服务器端代码:

ServerSocket serverSocket = new ServerSocket(1234);
Socket socket1 = serverSocket.accept();
Socket socket2 = serverSocket.accept();

InputStream input1 = socket1.getInputStream();
OutputStream output1 = socket1.getOutputStream();
InputStream input2 = socket2.getInputStream();
OutputStream output2 = socket2.getOutputStream();

byte[] buffer = new byte[1024];
int bytesRead;

while ((bytesRead = input1.read(buffer)) != -1) {
    output2.write(buffer, 0, bytesRead);
}

while ((bytesRead = input2.read(buffer)) != -1) {
    output1.write(buffer, 0, bytesRead);
}

socket1.close();
socket2.close();
serverSocket.close();

客户端代码:

Socket socket = new Socket("localhost", 1234);
OutputStream output = socket.getOutputStream();
InputStream input = socket.getInputStream();

Scanner scanner = new Scanner(System.in);
while (true) {
    String message = scanner.nextLine();
    output.write(message.getBytes());
    String receivedMessage = new String(input.readAllBytes());
    System.out.println("Received: " + receivedMessage);
}

2. 实时股票行情应用

以下是一个简单的实时股票行情应用示例,它从服务器获取股票数据,并实时显示在客户端。

服务器端代码:

ServerSocket serverSocket = new ServerSocket(1234);
Socket socket = serverSocket.accept();

InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();

while (true) {
    String stockData = "AAPL: 150.00";
    output.write(stockData.getBytes());
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

socket.close();
serverSocket.close();

客户端代码:

Socket socket = new Socket("localhost", 1234);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();

while (true) {
    String stockData = new String(input.readAllBytes());
    System.out.println("Stock Data: " + stockData);
}

总结

本文从Java网络编程基础入手,介绍了Socket编程,并通过两个实战案例展示了如何构建实时应用。通过学习本文,读者可以掌握Java网络编程的基本知识和技能,为以后更深入的学习打下坚实的基础。