2014年7月21日星期一

C# Socket基础(一)之启动异步服务侦听 - gaobing

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
C# Socket基础(一)之启动异步服务侦听 - gaobing  阅读原文»

C# Socket网络编程第一篇:

本文主要是以代码为主。

.NET技术交流群 199281001 .欢迎加入

1 //负责监听的套接字
private Socket socketServer;
     //通知一个或多个正在等待的线程已发生事件。
ManualResetEvent manager = new ManualResetEvent(false);
2 /// <summary>
3 /// 启动服务
4 /// </summary>
5 private void CreateSocketService()
6 {
7 try
8 {
9 //获取IP
10 var address = IPAddress.Parse(txtIP.Text.Trim());
11 //创建一个包含ip port 的网络节点对象
12 var ipPoint = new IPEndPoint(address, Convert.ToInt32(txtPort.Text.Trim()));
13 //创建一个套接字socket,参数(IP4寻址协议,流式连接,使用TCP协议传输数据)
14 socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
15 //将负责监听的套接字绑定到唯一的IP和端口上
16 socketServer.Bind(ipPoint);
17 //设置监听队列的长度
18 socketServer.Listen(100);
19 //线程开始监听客户端的请求
20 threadService = new Thread(StartSocketService);
21 //设置线程为后台线程
22 threadService.IsBackground = true;
23 //启动线程
24 threadService.Start();
25 //显示消息
26 ShowMsg("服务器监听开启成功!");
27 28
29 }
30 catch (Exception e)
31 {
32
33 ShowMsg(e.Message);
34 }
35 }
1 /// <summary>
2 /// 启动服务监听
3 /// </summary>
4 private void StartSocketService()
5 {
6 while (true)
7 {
8 try
9 {
              //将事件状态设置为非终止状态,导致线程阻止
10 manager.Reset();
11 //开始监听客户端的连接请求
12 var args = new SocketAsyncEventArgs();
13 args.Completed += args_Completed;
14 socketServer.AcceptAsync(args);
              //阻止当前线程,直到当前 WaitHandle 收到信号。
15 manager.WaitOne();
16 }
17 catch (Exception ex)
18 {
19
20 ShowMsg(ex.Message);
21 break;
22 }
23 }
24 }
1 void args_Completed(object sender, SocketAsyncEventArgs e)
2 {
3 //监听完成客户端的请求,一但监听到返回新的套接字
4 var clientSocket = e.AcceptSocket;
Android -- Home按键 - 我爱物联网  阅读原文»

游戏中常常需要监听android HOME键,当HOME键下压时,往往需要做一些状态保存,音效停止等操作,那么如何做,才能监听到HOME键呢?我们知道HOME是系统键,app中无法通过onKey这些函数来处理。要妥善的处理HOME键,首先需要看看HOME键下压时,系统做了些什么。

  • HOME键之来龙去脉

  • app中对于HOME键广播事件的接收

首先,自定义一个BroadcastReceiver:

class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {

static final String SYSTEM_REASON = "reason";
static final String SYSTEM_HOME_KEY = "homekey";//home key
static final String SYSTEM_RECENT_APPS = "recentapps";//long home key

@Override
public void onReceive(Context context, Intent intent) {
String action
= intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason
= intent.getStringExtra(SYSTEM_REASON);
if (reason != null) {
if (reason.equals(SYSTEM_HOME_KEY)) {
// home key处理点

}
else if (reason.equals(SYSTEM_RECENT_APPS)) {
// long home key处理点
}
}
}
}
}

其次,生成且注册之

receiver = new HomeKeyEventBroadCastReceiver();
registerReceiver(receiver,
new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

这样,我们就可以在app中进行HOME键的处理了!

我是天王盖地虎的分割线

参考:http://blog.csdn.net/imyfriend/article/details/8293399


本文链接:Android -- Home按键,转载请注明。

阅读更多内容

没有评论:

发表评论