欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199
使用Java实现TCP和UDP传输原始报文的功能,包括服务端返回响应存储数据的结果,可以按照以下步骤进行:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
int port = 8888;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("TCP Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Accepted connection from " + clientSocket.getInetAddress().getHostAddress());
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
// 读取客户端发送的数据
byte[] data = new byte[1024];
int bytesRead = in.read(data);
String request = new String(data, 0, bytesRead);
// 处理数据并返回响应
String response = processData(request);
out.write(response.getBytes());
// 关闭连接
clientSocket.close();
}
}
private static String processData(String request) {
// 处理逻辑,将数据存储到数据库等
return "Data stored successfully!";
}
}
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
String serverAddress = "localhost";
int serverPort = 8888;
Socket socket = new Socket(serverAddress, serverPort);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
// 发送数据给服务端
String data = "Raw data to be stored";
out.write(data.getBytes());
// 接收服务端返回的响应
byte[] responseBytes = new byte[1024];
int bytesRead = in.read(responseBytes);
String response = new String(responseBytes, 0, bytesRead);
System.out.println("Server response: " + response);
// 关闭连接
socket.close();
}
}
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) throws IOException {
int port = 8888;
DatagramSocket serverSocket = new DatagramSocket(port);
System.out.println("UDP Server started on port " + port);
while (true) {
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String request = new String(receivePacket.getData(), 0, receivePacket.getLength());
InetAddress IPAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
// 处理数据并返回响应
String response = processData(request);
byte[] sendData = response.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, clientPort);
serverSocket.send(sendPacket);
}
}
private static String processData(String request) {
// 处理逻辑,将数据存储到数据库等
return "Data stored successfully!";
}
}
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
String serverAddress = "localhost";
int serverPort = 8888;
DatagramSocket socket = new DatagramSocket();
// 发送数据给服务端
String data = "Raw data to be stored";
byte[] sendData = data.getBytes();
InetAddress IPAddress = InetAddress.getByName(serverAddress);
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, serverPort);
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();
}
}
使用Java实现TCP和UDP传输原始报文,并在服务端返回响应后将数据存储的功能。需要注意的是,TCP是基于连接的,而UDP是无连接的。因此,TCP客户端和服务端需要在建立连接后进行通信,而UDP客户端和服务端可以直接发送和接收数据包。