一.服务端代码:
import java.io.*; import java.net.*; public class UDPEchoServer { private static final int ECHOMAX = 255; // Maximum size of echo datagram public static void main(String[] args) throws IOException { int servPort = 5500; // Server port DatagramSocket socket = new DatagramSocket(servPort); DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX); while (true) { // Run forever, receiving and echoing datagrams socket.receive(packet); // Receive packet from client System.out.println("Handling client at " + packet.getAddress().getHostAddress() + " on port " + packet.getPort()); socket.send(packet); // Send the same packet back to client packet.setLength(ECHOMAX); // Reset length to avoid shrinking buffer } /* NOT REACHED */ } }
二.客户端代码:
import java.net.*; import java.io.*; public class UDPEchoClientTimeout { private static final int TIMEOUT = 3000; // Resend timeout (milliseconds) private static final int MAXTRIES = 5; // Maximum retransmissions public static void main(String[] args) throws IOException { InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); // Server address int servPort = 5500; // Server port // Convert the argument String to bytes using the default encoding byte[] bytesToSend = "Hi, World".getBytes(); DatagramSocket socket = new DatagramSocket(); socket.setSoTimeout(TIMEOUT); // Maximum receive blocking time(milliseconds) // Sending packet DatagramPacket sendPacket = new DatagramPacket(bytesToSend, bytesToSend.length, serverAddress, servPort); DatagramPacket receivePacket = // Receiving packet new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length); int tries = 0; // Packets may be lost, so we have to keep trying boolean receivedResponse = false; do { socket.send(sendPacket); // Send the echo string try { socket.receive(receivePacket); // Attempt echo reply reception if (!receivePacket.getAddress().equals(serverAddress)) {// Check // source throw new IOException("Received packet from an unknown source"); } receivedResponse = true; } catch (InterruptedIOException e) { // We did not get anything tries += 1; System.out.println("Timed out, " + (MAXTRIES - tries) + " more tries..."); } } while ((!receivedResponse) && (tries < MAXTRIES)); if (receivedResponse) { System.out.println("Received: " + new String(receivePacket.getData())); } else { System.out.println("No response -- giving up."); } socket.close(); } }
上述代码的UDP服务端是单线程,一次只能服务一个客户端。
参考:
相关推荐
矿用产量数据采集应用实例,使用HPsocket框架结构,通过UDP协议接收从服务器上传的数据并进行解码
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2114621
Socket网络编程学习笔记之---使用线程池提高性能
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2114632
java socket udp网络通讯小例子
SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...
TCP-UDP-Socket调试工具2.2.3 TCP-UDP-Socket调试工具2.2.3 TCP-UDP-Socket调试工具2.2.3
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2115715
Socket-UDP-长链接,里面有Socket 实现 长链接(项目名字起错了,不影响使用),还有Socket-UDP
HP-Socket-TCP-&-UDP-通信框架开发指南-(v4.2-20170420)
编程开发,适合初学者学习Socket编程的Tcp和Udp协议的Demo
使用TCP Socket和UDP传送任意类型、大小的文件
基于官方dtu_demo.lua的修改,配合:合宙Air105|Socket|UDP |TCP/IP|W5500|Serial 串口|透传|DTU|网络测试助手|双机互联|内网测试|官方demo|学习(8-3):Socket网络接口-双机互联透传使用:DTU透传(采用UDP方式...
TCP-UDP-SOCK-TOOL[TCP-UDP Socket调试工具集合].7z TCP-UDP-SOCK-TOOL[TCP-UDP Socket调试工具集合].7z
基于socket编程最简单的udp服务端代码,嗯,我只是用来凑积分的
java-socket大文件上传-含客户端和服务端 java-socket大文件上传-含客户端和服务端
该资源是基于UDP的异步聊天室,一个服务器多个客户端,没有使用多线程
java socket 学习资料java socket 学习资料java socket 学习资料java socket 学习资料java socket 学习资料
使用socket构造udp网络数据包,并发送构造的udp数据包
主要讲解Java Socket编程中UDP的基本使用,希望能给大家做一个参考。