一个最简单的网络编程

发布时间:2026/7/5 21:00:09
一个最简单的网络编程 今天总结一下我至今学的第一个网络编程也是一个最简单的网络编程。这篇博客只是将如何用代码实现一个网络编程具体细节不讲解后续会介绍详细细节。网络编程会涉及到客户端和服务器的实现。1.服务器的实现首先服务器的接受请求和发送响应的功能我们通过DatagramSocket类的实例化对象来实现一般对于服务器我们一般希望服务器有一个固定的端口号所以在创建DatagramSocket对象时一般会固定一个端口号。接着我们在一个start方法中具体实现服务器的功能。首先我们需要一个UDP数据包来保存客户端发送来的请求这个UDP数据报可以通过DatagramPacket类来实现。如上图requestPacket就是来保存客户端发送来的请求请求的具体内容是保存在构造方法中的byte数组中注意此时请求的内容还没有保存到byte数组里面我们只是构造了一个保存请求内容的载体还未初始化。接着通过socket对象的receive方法来接受客户端发送来的请求。这里receive方法中的requestPacket是一个返回型参数则经过该方法后requestPacket的byte数组已经初始换完成了。注意当服务器没有接受到客户端发送来的请求时时会阻塞在receive方法这里的。接着接受到客户端发送来的请求之后我们就要解析请求中的内容。由于在网络中数据的发送都是将数据转换为二进制来发送这里我们就是将二进制还原成字符串。这里的requestPacket.getData方法是获取保存请求内容的byte数组而 requestPacket.getLength方法可以获取到byte数组中的有效长度。再接着我们就要对请求进行响应由于我们这里实现的是回显型服务器所以请求和响应是相同的相当于这步骤省略了。再接着我们就要将响应返回给客户端此时我们也要建立一个UDP数据报来存储响应不过在建立响应的数据报的时候由于UDP数据报没有保存对端的ip地址和端口号所以我们要将目的IP和目的端口号明确因为服务器返回响应时我们要明确将响应返回到哪一个客户端。接着将响应数据包发送给客户端也就是返回响应通过send方法来实现。最后我们来打印请求内容和响应内容getAdress方法用来获取ip地址getPort方法用来获取端口号。服务器完整代码实现import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UdEchoServer { //通过socket对象来实现接受请求和发送响应 DatagramSocket socketnull; public UdEchoServer(int port) throws SocketException { //port是服务器的固定端口号 socketnew DatagramSocket(port); } public void start() throws IOException { System.out.println(服务器启动); while(true){ DatagramPacket requestPacketnew DatagramPacket(new byte[4096],4096); socket.receive(requestPacket); String requestnew String(requestPacket.getData(),0, requestPacket.getLength()); String responseprocess(request); DatagramPacket responsePacketnew DatagramPacket(response.getBytes(),0,response.getBytes().length ,requestPacket.getSocketAddress()); socket.send(responsePacket); System.out.printf([%s, %d] request: %s, response: %s\n,requestPacket.getAddress().toString(), requestPacket.getPort(),request,response); } } private String process(String request) { return request; } public static void main(String[] args) throws IOException { UdEchoServer servernew UdEchoServer(9090); server.start(); } }2.客户端的实现首先客户端的作用就是向服务器发送请求和接收服务器返回的响应所以我们也是要通过DatagramSocket类的实例化对象来实现发送和接受功能。不过此时数据通过UDP数据报来发送和接收的而UDP是不保存对端的IP和端口号所以此时我们可以在客户端的代码中记录服务器的IP和端口号。还有对于客户端我们希望客户端的端口号是随机的。接下来我们也在一个start方法里面实现客户端中的具体功能。首先需要设计一个用户输入请求的功能。然后再建立一个DatagramPacket对象UDP数据报来保存请求的内容在建立这个UDP数据报时我们也要明确对端IP和对端的端口号。InetAddresss.getByName()方法将IP地址转换为。接着存储好数据后就要将请求发送给服务器通过send方法来实现。在接着就要读取服务器的响应并解析出响应的内容。这一步我们还要创建一个DatagramPacket对象来保存响应的内容并通过receive方法来接收服务器的响应和初始化DatagramPacket对象。最后打印响应的内容客户端完整代码import java.io.IOException; import java.net.*; import java.util.Scanner; public class UdEchoClient { DatagramSocket socketnull; public String serverIp;//客户端端IP地址 public int serverPort;//客户端端口号 public UdEchoClient(String serverIp,int serverPort) throws SocketException { this.serverIpserverIp; this.serverPortserverPort; socketnew DatagramSocket();//不传参会随机分配一个端口号给客户端 } public void start() throws IOException { Scanner scannernew Scanner(System.in); while (true){ System.out.println(请输入你的请求内容); String requestscanner.next(); DatagramPacket requestPacketnew DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(serverIp),serverPort); socket.send(requestPacket); DatagramPacket responsePacketnew DatagramPacket(new byte[4096],4096); socket.receive(responsePacket); String responsenew String(responsePacket.getData(),0,responsePacket.getLength()); System.out.println(response); } } public static void main(String[] args) throws IOException { UdEchoClient clientnew UdEchoClient(127.0.0.1,9090); client.start(); } }运行代码