基于UDP、TCP分别实现客户端与服务端之间的通信
基于UDP实现
客户端代码(UdpClient)
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UdpClient {
private static final String ip = "127.0.0.1";
private static final int port = 9001;
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
DatagramSocket client = new DatagramSocket();
Scanner scanner = new Scanner(System.in);
while (true){
System.out.print("->");
String cliMsg = scanner.nextLine();
DatagramPacket datagramPacket = new DatagramPacket(
cliMsg.getBytes(),
cliMsg.getBytes().length,
InetAddress.getByName(ip),
port
);
client.send(datagramPacket);
DatagramPacket serPacket = new DatagramPacket(
new byte[bleng],
bleng
);
client.receive(serPacket);
String serMsg = new String(serPacket.getData());
System.out.println("服务器:"+serMsg);
}
}
}
服务器代码(UdpServer)
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;
public class UdpServer {
private static final int port = 9001;
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(port);
Scanner scan = new Scanner(System.in);
System.out.println("服务器已启动!");
while (true) {
DatagramPacket clientPacket = new DatagramPacket(
new byte[bleng],
bleng
);
socket.receive(clientPacket);
String cliMsg = new String(clientPacket.getData());
System.out.println("客户端:" + cliMsg);
System.out.print("->");
String serMsg = scan.nextLine();
DatagramPacket serPacket = new DatagramPacket(
serMsg.getBytes(),
serMsg.getBytes().length,
clientPacket.getAddress(),
clientPacket.getPort()
);
socket.send(serPacket);
}
}
}
基于TCP实现
客户端代码(TcpClient)
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient {
private static final String ip = "127.0.0.1";
private static final int port = 9999;
public static void main(String[] args) throws IOException {
Socket socket = new Socket(ip, port);
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
Scanner scanner = new Scanner(System.in)
) {
while (true) {
System.out.print("->");
String cliMsg = scanner.nextLine();
writer.write(cliMsg + "\n");
writer.flush();
String serMsg = reader.readLine();
if (serMsg != null && !serMsg.equals("")) {
System.out.println("服务器端消息:" + serMsg);
}
}
}
}
}
服务器代码(TcpServer)
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TcpServer {
private static final int port = 9999;
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器已启动");
Socket clientSocket = serverSocket.accept();
System.out.println(String.format("客户端已连接了,IP:%s,端口号:%d",
clientSocket.getInetAddress().getHostAddress(),
clientSocket.getPort()));
Scanner scan = new Scanner(System.in);
try (
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream()));
BufferedReader reader = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()))
) {
while (true) {
String cliMsg = reader.readLine();
System.out.println("客户端消息:" + cliMsg);
System.out.print("->");
String serMsg = scan.nextLine();
writer.write(serMsg + "\n");
writer.flush();
}
}
}
}
基于Tcp实现简单的HTTP
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class HttpServlet {
private static final int port = 1024;
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器已启动~");
Socket socket = serverSocket.accept();
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()))
) {
String firstLine = reader.readLine();
String[] firstLineArr = firstLine.split(" ");
String method = firstLineArr[0];
String uri = firstLineArr[1];
String httpVersion = firstLineArr[2];
System.out.println(String.format("首行信息 -> 方法类型:%s,URI:%s,HTTP版本号:%s",
method, uri, httpVersion));
String content = "";
if (uri.contains("404")) {
content = "<h1>没有找到此页面</h1>";
} else if (uri.contains("200")) {
content = "<h1>你好,世界</h1>";
}
writer.write(String.format("%s 200 ok", httpVersion) + "\n");
writer.write("Content-Type: text/html;charset=utf-8\n");
writer.write("Content-Length: " + content.getBytes().length + "\n");
writer.write("\n");
writer.write(content);
writer.flush();
}
}
}