通过本篇文章可以学习到:
❓1、局域网与广域网的概念
❓2、IP地址和端口号的概念
❓3、OSI七层网络协议
❓4、TCP/IP五层网络协议
❓5、利用UDP协议实现一个回显服务器程序
❓6、利用TCP协议实现一个回显服务器程序
❓7、多线程 / 线程池方法解决TCP实现回显服务器中的无法同时响应多个客户端请求的问题
❓8、五元组的概念
❓9、TCP的五层协议栈
❓10、应用层:了解应用层协议的模板,xml,json,probuffer
❓11、传输层:了解传输层的两个协议:TCP+UDP
❓12、了解TCP协议是如何保证可靠传输的
❓13、TCP协议中保证可靠传输的十个机制
❓14、了解网络层的ip协议
❓15、了解ip协议中的地址管理+路由选择
❓16、了解数据链路层中的协议:以太网
❓17、了解DNS域名解析
1、局域网和广域网
2、IP地址和端口号
3、协议
4、网络编程套用字
5、TCP/IP五层协议栈
6、DNS域名域名解析
package network;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
/**
* Created with IntelliJ IDEA.
* Description:
* User: Lenovo
* Date: 2022-04-17
* Time: 12:04
*/
public class UdpEchoServer {
private DatagramSocket socket = null;
public UdpEchoServer(int port) throws SocketException {
socket = new DatagramSocket(port);
}
public void start() throws IOException {
System.out.println("启动服务器!!!");
while(true){
DatagramPacket requestPacket = new DatagramPacket(new byte[1024],1024);
socket.receive(requestPacket);
String request = new String(requestPacket.getData(),0,requestPacket.getLength(), StandardCharsets.UTF_8);
String response = process(request);
DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.getBytes().length,requestPacket.getSocketAddress());
socket.send(responsePacket);
System.out.printf("[%s:%d] req:%s reps:%s",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);
System.out.println();
}
}
private String process(String request) {
return request;
}
public static void main(String[] args) throws IOException {
UdpEchoServer udpEchoServer = new UdpEchoServer(9090);
udpEchoServer.start();
}
}
package network;
import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: Lenovo
* Date: 2022-04-17
* Time: 14:37
*/
public class UdpEchoClient {
private DatagramSocket socket = null;
private String ip;
private int port;
public UdpEchoClient(String ip,int prot) throws SocketException {
socket = new DatagramSocket();
this.ip = ip;
this.port = prot;
}
public void start() throws IOException {
System.out.println("启动客户端");
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("——>");
String request = scanner.next();
DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.getBytes().length, InetAddress.getByName(ip),port);
socket.send(requestPacket);
DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(),0,responsePacket.getLength(), StandardCharsets.UTF_8);
System.out.printf("req:%s reps:%s",request,response);
System.out.println();
}
}
public static void main(String[] args) throws IOException {
UdpEchoClient udpEchoClient = new UdpEchoClient("127.0.0.1",9090);
udpEchoClient.start();
}
}
package network;
import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: Lenovo
* Date: 2022-04-17
* Time: 14:37
*/
public class UdpEchoClient {
private DatagramSocket socket = null;
private String ip;
private int port;
public UdpEchoClient(String ip,int prot) throws SocketException {
socket = new DatagramSocket();
this.ip = ip;
this.port = prot;
}
public void start() throws IOException {
System.out.println("启动客户端");
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("——>");
String request = scanner.next();
DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.getBytes().length, InetAddress.getByName(ip),port);
socket.send(requestPacket);
DatagramPacket responsePacket = new DatagramPacket(new byte[1024],1024);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(),0,responsePacket.getLength(), StandardCharsets.UTF_8);
System.out.printf("req:%s reps:%s",request,response);
System.out.println();
}
}
public static void main(String[] args) throws IOException {
UdpEchoClient udpEchoClient = new UdpEchoClient("127.0.0.1",9090);
udpEchoClient.start();
}
}
建议参考此博客
1、明确传输的信息
2、明确数据的组织格式