UDP协议java测试案例
来源:互联网 发布:阿里云修改主机名 编辑:程序博客网 时间:2024/04/29 07:45
package handler;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.*;
/**
* UDP客户端和服务端测试案例
* Created by Administrator on 2016-11-25.
*/
public class UDPTest {
public static void main(String[] args) throws IOException {
client();
}
/**
* UDP客户端发送数据,和接收服务端返回的数据
* @throws IOException
*/
public static void client() throws IOException {
int TIMEOUT = 5000; //设置接收数据的超时时间
int MAXNUM = 5; //设置重发数据的最多次数
String str_send = "Hello this client";
byte[] buf = new byte[1024];
//客户端在9000端口监听接收到的数据
DatagramSocket ds = new DatagramSocket(9000);
InetAddress loc = InetAddress.getByName("10.0.0.1");
//定义用来发送数据的DatagramPacket实例 参数:信息byte[],信息长度,服务端IP,服务端监听端口
DatagramPacket dp_send= new DatagramPacket(str_send.getBytes(),str_send.length(),loc,10006);
//定义用来接收数据的DatagramPacket实例
DatagramPacket dp_receive = new DatagramPacket(buf, 1024);
ds.setSoTimeout(TIMEOUT); //设置接收数据时阻塞的最长时间
int tries = 0; //重发数据的次数
boolean receivedResponse = false; //是否接收到数据的标志位
//直到接收到数据,或者重发次数达到预定值,则退出循环
while(!receivedResponse && tries<MAXNUM){
//发送数据
ds.send(dp_send);
try{
System.out.println("发送数据成功");
//接收从服务端发送回来的数据
ds.receive(dp_receive);
//如果接收到的数据不是来自目标地址,则抛出异常
if(!dp_receive.getAddress().equals(loc)){
throw new IOException("Received packet from an umknown source");
}
//如果接收到数据。则将receivedResponse标志位改为true,从而退出循环
receivedResponse = true;
}catch(InterruptedIOException e){
//如果接收数据时阻塞超时,重发并减少一次重发的次数
tries += 1;
System.out.println("Time out," + (MAXNUM - tries) + " more tries..." );
}
}
if(receivedResponse){
//如果收到数据,则打印出来
String str_receive = new String(dp_receive.getData(),0,dp_receive.getLength()) +
" from " + dp_receive.getAddress().getHostAddress() + ":" + dp_receive.getPort();
System.out.println(str_receive);
//由于dp_receive在接收了数据之后,其内部消息长度值会变为实际接收的消息的字节数,
//所以这里要将dp_receive的内部消息长度重新置为1024
dp_receive.setLength(1024);
}else{
//如果重发MAXNUM次数据后,仍未获得服务器发送回来的数据,则打印如下信息
System.out.println("No response -- give up.");
}
ds.close();
}
/**
* UDP服务端接收数据,和返回数据到客户端
* @throws IOException
*/
public static void server() throws IOException {
String str_send = "Hello world";
byte[] buf = new byte[1024];
//服务端在10006端口监听接收到的数据
DatagramSocket ds = new DatagramSocket(10006);
//接收从客户端发送过来的数据
DatagramPacket dp_receive = new DatagramPacket(buf, 1024);
boolean f = true;
while(f){
//服务器端接收来自客户端的数据
ds.receive(dp_receive);
System.out.println("server received data from client:");
String str_receive = new String(dp_receive.getData(),0,dp_receive.getLength()) +
" from " + dp_receive.getAddress().getHostAddress() + ":" + dp_receive.getPort();
System.out.println(str_receive);
//数据发动到客户端的3000端口
DatagramPacket dp_send= new DatagramPacket(str_send.getBytes(),str_send.length(),dp_receive.getAddress(),9000);
ds.send(dp_send);
//由于dp_receive在接收了数据之后,其内部消息长度值会变为实际接收的消息的字节数,
//所以这里要将dp_receive的内部消息长度重新置为1024
dp_receive.setLength(1024);
}
ds.close();
}
}
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.*;
/**
* UDP客户端和服务端测试案例
* Created by Administrator on 2016-11-25.
*/
public class UDPTest {
public static void main(String[] args) throws IOException {
client();
}
/**
* UDP客户端发送数据,和接收服务端返回的数据
* @throws IOException
*/
public static void client() throws IOException {
int TIMEOUT = 5000; //设置接收数据的超时时间
int MAXNUM = 5; //设置重发数据的最多次数
String str_send = "Hello this client";
byte[] buf = new byte[1024];
//客户端在9000端口监听接收到的数据
DatagramSocket ds = new DatagramSocket(9000);
InetAddress loc = InetAddress.getByName("10.0.0.1");
//定义用来发送数据的DatagramPacket实例 参数:信息byte[],信息长度,服务端IP,服务端监听端口
DatagramPacket dp_send= new DatagramPacket(str_send.getBytes(),str_send.length(),loc,10006);
//定义用来接收数据的DatagramPacket实例
DatagramPacket dp_receive = new DatagramPacket(buf, 1024);
ds.setSoTimeout(TIMEOUT); //设置接收数据时阻塞的最长时间
int tries = 0; //重发数据的次数
boolean receivedResponse = false; //是否接收到数据的标志位
//直到接收到数据,或者重发次数达到预定值,则退出循环
while(!receivedResponse && tries<MAXNUM){
//发送数据
ds.send(dp_send);
try{
System.out.println("发送数据成功");
//接收从服务端发送回来的数据
ds.receive(dp_receive);
//如果接收到的数据不是来自目标地址,则抛出异常
if(!dp_receive.getAddress().equals(loc)){
throw new IOException("Received packet from an umknown source");
}
//如果接收到数据。则将receivedResponse标志位改为true,从而退出循环
receivedResponse = true;
}catch(InterruptedIOException e){
//如果接收数据时阻塞超时,重发并减少一次重发的次数
tries += 1;
System.out.println("Time out," + (MAXNUM - tries) + " more tries..." );
}
}
if(receivedResponse){
//如果收到数据,则打印出来
String str_receive = new String(dp_receive.getData(),0,dp_receive.getLength()) +
" from " + dp_receive.getAddress().getHostAddress() + ":" + dp_receive.getPort();
System.out.println(str_receive);
//由于dp_receive在接收了数据之后,其内部消息长度值会变为实际接收的消息的字节数,
//所以这里要将dp_receive的内部消息长度重新置为1024
dp_receive.setLength(1024);
}else{
//如果重发MAXNUM次数据后,仍未获得服务器发送回来的数据,则打印如下信息
System.out.println("No response -- give up.");
}
ds.close();
}
/**
* UDP服务端接收数据,和返回数据到客户端
* @throws IOException
*/
public static void server() throws IOException {
String str_send = "Hello world";
byte[] buf = new byte[1024];
//服务端在10006端口监听接收到的数据
DatagramSocket ds = new DatagramSocket(10006);
//接收从客户端发送过来的数据
DatagramPacket dp_receive = new DatagramPacket(buf, 1024);
boolean f = true;
while(f){
//服务器端接收来自客户端的数据
ds.receive(dp_receive);
System.out.println("server received data from client:");
String str_receive = new String(dp_receive.getData(),0,dp_receive.getLength()) +
" from " + dp_receive.getAddress().getHostAddress() + ":" + dp_receive.getPort();
System.out.println(str_receive);
//数据发动到客户端的3000端口
DatagramPacket dp_send= new DatagramPacket(str_send.getBytes(),str_send.length(),dp_receive.getAddress(),9000);
ds.send(dp_send);
//由于dp_receive在接收了数据之后,其内部消息长度值会变为实际接收的消息的字节数,
//所以这里要将dp_receive的内部消息长度重新置为1024
dp_receive.setLength(1024);
}
ds.close();
}
}
0 0
- UDP协议java测试案例
- Apache Mina框架UDP测试案例--->java
- udp协议案例
- java UDP案例
- java udp协议
- java UDP协议程序设计
- JAVA UDP协议编程
- java实现udp协议
- java使用UDP协议
- 《java入门第一季》之UDP协议下的网络编程小案例
- JAVA中的网络协议,UDP,TCP案例分析及笔记总结
- [疯狂Java]UDP:UDP协议的概念
- 使用Java控制UDP协议
- 使用Java控制UDP协议
- 使用Java控制UDP协议
- 使用Java控制UDP协议
- Java中的UDP协议编程
- 使用Java控制UDP协议
- android之ScrollView滑动到指定的View
- 文本框(Textbox)和下拉框(Combobox)自动联想功能的实现
- live555客户端开发:解决客户端因同步超时被服务端踢掉的问题
- python 函数参数的传递(参数带星号的说明)
- jQuery实现li选中效果
- UDP协议java测试案例
- Coursera_Algorithms,Part I,第一周笔记
- jar包获取linux的kill命令的中断信号,安全停止
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- SpringMVC NamedThreadLocal
- 第十三周项目5-拓扑排序算法验证
- OpenWrt官方入门手册
- AsyncTask 小结
- linux 修改服务器时间