引言
Java网络编程是Java语言的核心组成部分,它使得Java程序能够与其他计算机进行通信和数据交换。本文将带你从零开始,逐步掌握Java网络编程的基础知识,并通过实战案例帮助你轻松上手。
第一部分:Java网络编程基础
1.1 Java网络编程简介
Java网络编程主要依赖于Java标准库中的java.net包,该包提供了用于网络通信的类和接口。
1.2 网络模型
在Java网络编程中,我们通常使用TCP/IP模型。该模型将网络通信分为四层:应用层、传输层、网络层和数据链路层。
1.3 Java网络编程基本类
InetAddress:用于获取IP地址Socket:用于创建客户端和服务器端ServerSocket:用于创建服务器端InputStream和OutputStream:用于处理数据流
第二部分:创建TCP客户端
2.1 创建TCP客户端
下面是一个简单的TCP客户端示例,用于向服务器发送数据并接收响应。
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
String hostname = "localhost";
int port = 1234;
Socket socket = new Socket(hostname, port);
OutputStream out = socket.getOutputStream();
PrintWriter writer = new PrintWriter(out, true);
writer.println("Hello, Server!");
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Server response: " + line);
}
socket.close();
}
}
2.2 创建TCP服务器
下面是一个简单的TCP服务器示例,用于接收客户端连接并处理请求。
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
int port = 1234;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server is listening on port " + port);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected!");
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Client sent: " + line);
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println("Received: " + line);
}
socket.close();
}
}
}
第三部分:创建UDP客户端
3.1 创建UDP客户端
下面是一个简单的UDP客户端示例,用于向服务器发送数据并接收响应。
import java.io.*;
import java.net.*;
public class UDPSocketClient {
public static void main(String[] args) throws IOException {
String hostname = "localhost";
int port = 1234;
DatagramSocket socket = new DatagramSocket();
InetAddress address = InetAddress.getByName(hostname);
String message = "Hello, Server!";
byte[] buf = message.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);
buf = new byte[100];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Server response: " + received);
socket.close();
}
}
3.2 创建UDP服务器
下面是一个简单的UDP服务器示例,用于接收客户端数据并发送响应。
import java.io.*;
import java.net.*;
public class UDPSocketServer {
public static void main(String[] args) throws IOException {
int port = 1234;
DatagramSocket socket = new DatagramSocket(port);
byte[] buf = new byte[100];
System.out.println("Server is listening on port " + port);
while (true) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Client sent: " + received);
InetAddress address = packet.getAddress();
int portNum = packet.getPort();
String response = "Received: " + received;
byte[] bufResponse = response.getBytes();
DatagramPacket packetResponse = new DatagramPacket(bufResponse, bufResponse.length, address, portNum);
socket.send(packetResponse);
}
}
}
总结
通过本文的学习,你已经掌握了Java网络编程的基础知识,并能够通过实战案例创建TCP和UDP客户端和服务器。希望这些知识能够帮助你更好地理解和应用Java网络编程。
