在Java里,网络编程主要是借助java.net
包中的类和接口来达成网络通信。下面将介绍Java网络编程的基本概念、相关类和接口,同时给出示例代码。
1. 基本概念
- TCP(传输控制协议):面向连接的、可靠的、基于字节流的传输协议。在进行数据传输前,需要先建立连接,传输完成后再断开连接。
- UDP(用户数据报协议):无连接的、不可靠的传输协议。它在传输数据时无需建立连接,直接发送数据报。
2. 相关类和接口
TCP编程
java.net.Socket
:代表客户端的套接字,用于与服务器建立连接并进行数据传输。java.net.ServerSocket
:代表服务器端的套接字,用于监听指定端口,等待客户端的连接请求。
UDP编程
java.net.DatagramSocket
:用于发送和接收数据报包。java.net.DatagramPacket
:表示数据报包,包含要发送或接收的数据、目标地址和端口号。
3. 示例代码
TCP编程示例
下面是一个简单的TCP客户端 - 服务器程序示例。
// 服务器端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("服务器已启动,等待客户端连接...");
try (Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
System.out.println("客户端已连接:" + socket.getInetAddress());
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("客户端消息:" + inputLine);
out.println("服务器已收到消息:" + inputLine);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("服务器响应:" + in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP编程示例
以下是一个简单的UDP客户端 - 服务器程序示例。
// 服务器端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket(9999)) {
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
System.out.println("UDP服务器已启动,等待客户端消息...");
socket.receive(receivePacket);
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("客户端消息:" + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 客户端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket()) {
InetAddress address = InetAddress.getByName("localhost");
String message = "Hello, UDP Server!";
byte[] sendData = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 9999);
socket.send(sendPacket);
System.out.println("消息已发送:" + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这些示例展示了如何运用Java进行基本的TCP和UDP网络编程。在实际应用中,你可能需要处理更多的异常情况,同时要考虑网络性能和安全性等问题。