首先是Android端,先创建一个内部类UDP,继承Thread类,在run方法中完成数据包的发送操作;在onCreate()方法中创建并执行该内部类的实例(多线程)实现数据包发送。
代码段如下:
public class Udp extends Thread {
private String dataString;
public Udp(String dataString) {
this.dataString = dataString;
}
public void run() {
try {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress ipAddr = InetAddress.getByName("192.168.99.35");
byte[] sendData = dataString.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, ipAddr, 32768);
clientSocket.send(sendPacket);
clientSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnTest = (Button) findViewById(R.id.button1);
final EditText tvOut = (EditText) findViewById(R.id.editText1);
btnTest.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String str = tvOut.getText().toString();
new Udp(str).start();
}
});
}
注意事项:
1.要记得给应用添加 android.permission.INTERNET 权限,否则在 DatagramSocket clientSocket = new DatagramSocket(); 处会抛出SocketException 异常;
2.不能在onCreate()方法中直接发送数据包,而要通过创建新线程来执行,否则会抛出 NetworkOnMainThreadException 异常。