目录
目的
第一步
编写Server(服务器)
第二步
创建Server的各类参数
第三步
实现具体的Server内容
第四步
编写Client(客户端)
实现具体的Client内容
总流程
总代码
源码下载
目的
我们编写一个udp 版本的 echo server 和 echo client
实现在自己电脑上通过客户端发送任何消息之后,服务端接送该消息
并不做任何处理原封不动返回该内容
第一步
创建两个java文件,命令为Server和Client
编写Server(服务器)
我们首先得清楚,在网络之中,肯定是服务器先启动,只有服务器先启动了我们的客户端才能给服务器发送指令
所以让我们先进入Server.java文件,开始我们的编写代码
第二步
创建Server的各类参数
首先操作网络,我们需要Java为我们提供的一个名字叫做DatagramSocket的包
然后在创建一个对象,给这个对象实例化的时候,我们需要手动为其配置一个端口
第三步
实现具体的Server内容
记住在网络之中
每一步传输/接收操作都需要重新打包
只要记住了这一点其实就没什么了,下面是每个代码的具体含义
第四步
编写Client(客户端)
实现具体的Client内容
首先我们还是,创建一个Socket来操作数据
这里看一下两者的不同
记住在网络之中
每一步传输/接收操作都需要重新打包
只要记住了这一点其实就没什么了,下面是每个代码的具体含义
总流程
让我们再来理一遍总体的流程
1.服务器创建一个DatagramPacket的包,等待客户端的消息传递(没有消息则阻塞)
2.客户端通过对应的端口号,附上自己的ip地址,把消息打包发送给服务器让他处理消息
3.服务器接受消息包,并且对消息进行处理,将处理完成的消息重新打包,以ip地址返回给客户端
4.客户端创建一个新的包,接受到了这个处理完成的数据
总代码
Server
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();
}
}
Client
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();
}
}
源码下载
https://download.csdn.net/download/qq_62718027/87945837