之前测试的时候有于对UDP通信理解存在误区,所以测试一直未接受返回数据
UDP协议进行信息传递之前不需要建立链接,就是说服务端存在响应与否不用管,只需要提供主机IP及端口号。
package com.xzy.utils;
import java.net.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class Test
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket();
myDatagramSocketReceive receiveData=new myDatagramSocketReceive(ds);
new Thread(receiveData).start();
String str = "注册码";
ds.send(new DatagramPacket(
str.getBytes(), str.getBytes().length,
InetAddress.getByName("IP"), port));
}
}
class myDatagramSocketReceive implements Runnable
{
private DatagramSocket ds;
private DatagramPacket dp;
private byte[] buf;
myDatagramSocketReceive(DatagramSocket ds)
{
try
{
this.ds = ds;
}
catch (Exception e)
{
throw new RuntimeException("Receive DatagramSocket");
}
buf=new byte[1024*4];
}
public void close()
{
ds.close();
}
public void run()
{
while(true)
{
try
{
dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(dp.getAddress().getHostName()+":"+(new String(dp.getData(),0,dp.getLength())));
}
catch (Exception e)
{
throw new RuntimeException("Receive");
}
}
}
}