Android 开发:多线程编程
Android 开发:多线程编程
功能与《Android 开发:Socket编程之udp发送》见 中一样,当按下键后,发送文本框中数据给PC。不同的是把发送数据的功能放在一个线程socket_send中。
环境:Windows 7 + Eclipse + SDK
代码:
主类test_socket.java
- package test.soket;
- //import com.test_button.R;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.Socket;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- public class test_socket extends Activity {
- public static TextView show;
- public static Button press;
- public static boolean flag;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //开辟控件空间
- show = (TextView)findViewById(R.id.editText1);
- press = (Button)findViewById(R.id.button1);
- flag = false;
- soket_send thread = new soket_send();
- thread.init();
- thread.start();
- press.setOnClickListener(new Button.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- flag = true;
- }
- });
- }
- }
线程类socke_sendt.java:
- package test.soket;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.Socket;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- import java.util.LinkedList;
- import android.media.AudioFormat;
- import android.media.AudioRecord;
- import android.media.MediaRecorder;
- import android.util.Log;
- public class soket_send extends Thread
- {
- private static final int MAX_DATA_PACKET_LENGTH = 40;
- private byte[] buffer = new byte[MAX_DATA_PACKET_LENGTH];
- private DatagramPacket dataPacket;
- private DatagramSocket udpSocket;
- public void init()
- {
- try
- {
- udpSocket = new DatagramSocket(5554);
- }
- catch (SocketException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);
- String str = "hello,jdh"; //这是要传输的数据
- byte out [] = str.getBytes(); //把传输内容分解成字节
- dataPacket.setData(out);
- dataPacket.setLength(out.length);
- dataPacket.setPort(5554);
- try
- {
- InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");
- dataPacket.setAddress(broadcastAddr);
- udpSocket.send(dataPacket);
- }
- catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void run()
- {
- while (true)
- {
- if (test_socket.flag)
- {
- //获得输入框文本
- CharSequence str =test_socket.show.getText();
- byte out[] = str.toString().getBytes();
- dataPacket.setData(out);
- dataPacket.setLength(out.length);
- try
- {
- InetAddress broadcastAddr = InetAddress.getByName("192.168.0.248");
- dataPacket.setAddress(broadcastAddr);
- udpSocket.send(dataPacket);
- }
- catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- test_socket.flag = false;
- }
- }
- }
- }
注意:程序中采用的线程间通信的方法是把需要共享的变量设置成public属性。
评论暂时关闭