1、使用网络 Socket 套接字编写客户端和服务器端,实现简单的数据通信,并可以收到回应。
服务器:
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.text.DateFormat;
import java.util.Date;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(11111);
System.out.println("服务器启动完毕");
System.out.println("等待客户端连接...");
Socket socket = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
if (socket.isConnected()) {
System.out.println("客户端名称为:" + socket.getInetAddress().getHostName() + " 连接成功");
out.println("连接成功");
}
while (true) {
String str = reader.readLine();
if (str.equals("Time")) {
Date date = new Date();
System.out.println("客户端请求当前时间");
DateFormat format = DateFormat.getDateTimeInstance();
out.println(format.format(date));
} else if (str.equals("exit")) {
System.out.println("bye");
out.println("连接断开");
break;
} else {
System.out.println("数据:" + str);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端:
import java.net.Socket;
import java.io.*;
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 11111);
OutputStream out = client.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader localMessage = new BufferedReader(new InputStreamReader(System.in));
System.out.println("从服务器" + client.getRemoteSocketAddress() + "返回的消息" + reader.readLine());
while (true) {
String message, str;
message = localMessage.readLine() + "n";
out.write(message.getBytes());
str = reader.readLine();
System.out.println("从服务器" + client.getRemoteSocketAddress() + "返回的消息" + str);
if (str.equals("Bye")) {
System.out.println("连接断开");
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、使用 DatagramSocket 类和 DatagramPacket 类实现客户端和服务器端数据通信。
客户端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class Client {
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket(6667);
String str = "Hello";
byte[] data = str.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));
client.send(packet);
client.close();
}
}
服务器端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
public static void main(String[] args) throws IOException {
DatagramSocket server = new DatagramSocket(8888);
byte[] flush = new byte[1024];
DatagramPacket packet = new DatagramPacket(flush, flush.length);
String str = new String(packet.getData(), 0, packet.getLength());
server.receive(packet);
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data, 0, len));
server.close();
}
}



