线程的监听 广播接收

protected void onCreate(Bundle savedInstanceState)
{

IntentFilter filter = new IntentFilter();
filter.addAction("testResult");
this.registerReceiver(recv, filter);

}

private BroadcastReceiver recv = new BroadcastReceiver() {//监听对象


@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if (action.equals("testResult")) {
int mark = intent.getIntExtra("mark", -1);
System.out.println(mark+"mark");
boolean res = intent.getBooleanExtra("data", false);
switch (mark) {
case 1:
if (res) {
System.out.println("111111");
loginButton();
}
else {
//为访问到服务器
Toast.makeText(Login.this, "没有连接服务器", 1).show();
}
break;
case 2:
if (res) {
RegistButton();
}
else {
//为访问到服务器
Toast.makeText(Login.this, "没有连接服务器", 1).show();
}
break;
default:
break;
}


}
}

};



//被监听的线程

public   void ConnectToService(int mark) {

this.mark = mark;

new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("调用服务器加载数据1");
test();

}

}.start();


}
public  void test() {
try {
HttpClient client = new DefaultHttpClient();
HttpPost postjson = new HttpPost(ApiUrl.loginUrl);
ArrayList<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair("selectMethod", "getRecommendItem"));
UrlEncodedFormEntity entityIn = new UrlEncodedFormEntity(nvps,"UTF8");
postjson.setEntity(entityIn);
HttpResponse response = client.execute(postjson);
HttpEntity entityOut = response.getEntity();
boolean res = false;
if (entityOut != null) {
                res = true;
                System.out.println("lwsss");
}
Intent intent = new Intent();
intent.setAction("testResult");
intent.putExtra("data", res);
intent.putExtra("mark", mark);
context.sendBroadcast(intent);

} catch (Exception e) {
Intent intent = new Intent();
intent.setAction("testResult");
intent.putExtra("data", false);
intent.putExtra("mark", mark);
context.sendBroadcast(intent);
}
}


在 Python ,可以使用多线程实现广播的发送和监听。发送广播消息可以在一个线程完成,而接收广播消息可以在另一个线程完成。下面是一个简单的 Python 代码示例,展示了如何使用多线程实现广播的发送和监听: ```python import socket import threading # 广播地址和端口号 broadcast_address = ('255.255.255.255', 8888) # 创建 Socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置 Socket 选项,允许广播 s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 发送广播消息的函数 def send_broadcast_message(): while True: message = input("Input message to broadcast: ") s.sendto(message.encode(), broadcast_address) # 接收广播消息的函数 def receive_broadcast_message(): # 创建 Socket 对象 r = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定 IP 地址和端口号 r.bind(('0.0.0.0', 8888)) # 设置 Socket 选项,允许广播 r.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 接收广播消息 while True: data, addr = r.recvfrom(1024) print("Received from {}: {}".format(addr, data.decode())) # 创建发送广播消息的线程 send_thread = threading.Thread(target=send_broadcast_message) # 创建接收广播消息的线程 receive_thread = threading.Thread(target=receive_broadcast_message) # 启动线程 send_thread.start() receive_thread.start() # 等待线程结束 send_thread.join() receive_thread.join() # 关闭 Socket s.close() ``` 在这个示例,我们创建了两个函数:`send_broadcast_message` 和 `receive_broadcast_message`,分别用于发送和接收广播消息。我们使用 `threading.Thread` 方法创建了两个线程,分别执行这两个函数。在主线程,我们等待这两个线程结束,然后关闭 Socket。注意,在发送广播消息的线程,我们使用 `input` 方法从控制台读取用户输入,然后将其发送到广播地址。在接收广播消息的线程,我们创建了另一个 Socket 对象,用于接收广播消息。每次接收广播消息后,我们输出到控制台。 需要注意的是,在多线程使用 Socket 时,要确保每个线程使用的 Socket 对象是不同的。因此,在接收广播消息的线程,我们创建了另一个 Socket 对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值