Java Socket编程实例(二)- UDP基本使用
时间:2021-04-18 09:48:30|栏目:JAVA代码|点击: 次
一.服务端代码:
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服务端是单线程,一次只能服务一个客户端。
上一篇:java 发送带Basic Auth认证的http post请求实例代码
栏 目:JAVA代码
下一篇:Java 反射机制原理与用法详解
本文标题:Java Socket编程实例(二)- UDP基本使用
本文地址:http://www.codeinn.net/misctech/103498.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




