Índice
Servidor de gravação(servidor)
Crie vários parâmetros para o servidor
Implementar conteúdo específico do servidor
Implementar conteúdo específico do cliente
Propósito
Escrevemos uma versão udp do echo server e do echo client
Após enviar qualquer mensagem através do cliente em seu próprio computador, o servidor receberá e enviará a mensagem
Retorne o conteúdo inalterado sem fazer nenhum processamento.
Primeiro passo
Crie dois arquivos java, os comandos são Servidor e Cliente
Servidor de gravação(servidor)
Devemos primeiro entender que na rede o servidor deve ser iniciado primeiro. Somente quando o servidor for iniciado primeiro nosso cliente poderá enviar instruções ao servidor.
Então, vamos primeiro entrar no arquivo Server.java e começar a escrever nosso código
Passo 2
Crie vários parâmetros para o servidor
Primeiro para operar a rede, precisamos de um pacote chamado DatagramSocket fornecido pelo Java.
Então ao criar um objeto e instanciar o objeto, precisamos configurar manualmente uma porta para ele
terceiro passo
Implementar conteúdo específico do servidor
A seguir está o significado específico de cada código
o quarto passo
Escrever Cliente(cliente)
Implementar conteúdo específico do cliente
Primeiro ainda criamos um Socket para manipular dados
Aqui está uma olhada na diferença entre os dois
A seguir está o significado específico de cada código
Processo geral
Vamos repassar o processo geral novamente
1. O servidor cria um pacote DatagramPacket e aguarda a entrega da mensagem do cliente (bloqueando se não houver mensagem)
2. O cliente anexa seu próprio endereço IP através do número da porta correspondente, empacota a mensagem e a envia ao servidor para que ele processe a mensagem.
3. O servidor aceita o pacote de mensagens, processa a mensagem, reembala a mensagem processada e a retorna ao cliente com o endereço IP.
4. O cliente cria um novo pacote e recebe os dados processados.
código total
Servidor
import java.net.DatagramSocket;
import java.net.SocketException;
public class MyServer {
private DatagramSocket socket = null;
MyServer(int port) throws SocketException {
this.socket = new DatagramSocket(port);
}
public void start() throws IOException {
System.out.println("服务器启动!");
while(true){
DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);
socket.receive(requestPacket);
String request = new String(requestPacket.getData(),0, requestPacket.getLength());
String response = process(request);
DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.length(),
requestPacket.getSocketAddress());
socket.send(responsePacket);
System.out.printf("[%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(),
requestPacket.getPort(), request, response);
}
}
public String process(String request){
return request;
}
public static void main(String[] args) throws IOException {
MyServer myServer = new MyServer(9090);
myServer.start();
}
}
Cliente
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class MyClient {
DatagramSocket socket = null;
int server_port;
String server_ip;
MyClient(String server_ip,int server_port) throws SocketException {
this.socket = new DatagramSocket();
this.server_ip = server_ip;
this.server_port = server_port;
}
public void start() throws IOException {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("->");
String request = sc.next();
DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.length(),
InetAddress.getByName(server_ip),server_port);
socket.send(requestPacket);
DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(),0,responsePacket.getLength());
System.out.printf("req: %s, resp: %s\n", request, response);
}
}
public static void main(String[] args) throws IOException {
MyClient myClient = new MyClient("127.0.0.1",9090);
myClient.start();
}
}