Android 开发:Socket编程之udp发送


需要实现的功能:采用udp下的socket编程,当按下确认键,模拟器发送文本框数据,pc机上的网络调试助手接收

环境:Windows 7 + Eclipse + SDK

代码:

  1. package test.soket;  
  2.   
  3. //import com.test_button.R;   
  4.   
  5. import java.io.DataOutputStream;  
  6. import java.io.IOException;  
  7. import java.net.DatagramPacket;  
  8. import java.net.DatagramSocket;  
  9. import java.net.InetAddress;  
  10. import java.net.Socket;  
  11. import java.net.SocketException;  
  12. import java.net.UnknownHostException;  
  13.   
  14. import Android.app.Activity;  
  15. import android.os.Bundle;  
  16. import android.view.View;  
  17. import android.widget.Button;  
  18. import android.widget.TextView;  
  19.   
  20. public class test_socket extends Activity {  
  21.     public static TextView show;  
  22.     public static Button press;  
  23.     public static boolean flag;  
  24.       
  25.     private static final int MAX_DATA_PACKET_LENGTH = 40;  
  26.     private byte[] buffer = new byte[MAX_DATA_PACKET_LENGTH];  
  27.     private DatagramPacket dataPacket;  
  28.     private DatagramSocket udpSocket;  
  29.       
  30.     /** Called when the activity is first created. */  
  31.     @Override  
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.main);  
  35.           
  36.         //开辟控件空间   
  37.         show = (TextView)findViewById(R.id.editText1);  
  38.         press = (Button)findViewById(R.id.button1);  
  39.         flag = false;  
  40.         //soket_send thread = new soket_send();   
  41.         //thread.init();   
  42.         //thread.start();   
  43.           
  44.         try  
  45.         {  
  46.             udpSocket = new DatagramSocket(5554);  
  47.         }  
  48.         catch (SocketException e)  
  49.         {  
  50.             // TODO Auto-generated catch block   
  51.             e.printStackTrace();  
  52.         }  
  53.         dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);  
  54.         String str = "hello,jdh";  //这是要传输的数据   
  55.         byte out [] = str.getBytes();  //把传输内容分解成字节   
  56.         dataPacket.setData(out);  
  57.         dataPacket.setLength(out.length);  
  58.         dataPacket.setPort(5554);  
  59.         try  
  60.         {  
  61.                   
  62.             InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");  
  63.             dataPacket.setAddress(broadcastAddr);  
  64.             udpSocket.send(dataPacket);  
  65.         }  
  66.         catch (IOException e)  
  67.         {  
  68.             // TODO Auto-generated catch block   
  69.             e.printStackTrace();  
  70.         }  
  71.           
  72.              
  73.         press.setOnClickListener(new Button.OnClickListener()  
  74.         {  
  75.             @Override  
  76.             public void onClick(View v)  
  77.             {  
  78.                 flag = true;  
  79.                 /* 
  80.                 String str = "hello,jdh";  //这是要传输的数据 
  81.                 byte out [] = str.getBytes();  //把传输内容分解成字节 
  82.                 dataPacket.setData(out); 
  83.                 dataPacket.setLength(out.length); 
  84.                 */  
  85.                   
  86.                 //获得输入框文本   
  87.                 CharSequence str =test_socket.show.getText();  
  88.                 byte out[] = str.toString().getBytes();  
  89.                 dataPacket.setData(out);  
  90.                 dataPacket.setLength(out.length);  
  91.                 try  
  92.                 {  
  93.                           
  94.                     InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");  
  95.                     dataPacket.setAddress(broadcastAddr);  
  96.                     udpSocket.send(dataPacket);  
  97.                 }  
  98.                 catch (IOException e)  
  99.                 {  
  100.                     // TODO Auto-generated catch block   
  101.                     e.printStackTrace();  
  102.                 }  
  103.             }  
  104.         });  
  105.     }  
  106. }  

界面:

注意:在模拟器IP为本机IP,端口为模拟器名称

相关内容