设为首页 收藏本站
查看: 486|回复: 0

win8 metro socket

[复制链接]

尚未签到

发表于 2015-5-21 09:52:43 | 显示全部楼层 |阅读模式
1 private async void btnListen_Click(object sender, RoutedEventArgs e)
  2         {
  3             try
  4             {
  5                 _listener = new StreamSocketListener();
  6
  7                 //_listener.Control.QualityOfService = SocketQualityOfService.Normal;
  8
  9                 _listener.ConnectionReceived += _listener_ConnectionReceived;
10                 await _listener.BindEndpointAsync(_localHostName, _localServerName);
11                 btnListen.IsEnabled = false;
12                 btnStopListen.IsEnabled = true;
13             }
14             catch (Exception ex)
15             {
16                 var status = SocketError.GetStatus(ex.HResult);
17             }
18         }
19
20         private DataReader reader;
21
22         ///
23         /// 处理接入的请求
24         ///
25         ///
26         ///
27         void _listener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
28         {
29             reader = new DataReader(args.Socket.InputStream);
30             ReceiveStringLoop(reader, args.Socket);
31             //ReceiveDataLoop(_reader,args.Socket);
32         }
33
34         ///
35         /// 循环处理数据
36         ///
37         ///
38         ///
39         private void ReceiveStringLoop(DataReader reader, StreamSocket socket)
40         {
41             try
42             {
43                 reader.LoadAsync(sizeof(uint)).AsTask().ContinueWith((result) =>
44                   {
45                       uint size = (uint)result.Result;
46
47                       if (size < sizeof(uint))
48                       {
49                           // The underlying socket was closed before we were able to read the whole data.
50                           return;
51                       }
52
53                       uint stringLength = reader.ReadUInt32();
54                       reader.LoadAsync((uint)stringLength).AsTask().ContinueWith((strLength) =>
55                       {
56                           string msg = reader.ReadString(reader.UnconsumedBufferLength);
57                           ShowMessage(msg);
58                       });
59                   }).ContinueWith((e) =>
60                   {
61                       //这里注意要新new一个DataReader对象
62                       ReceiveStringLoop(new DataReader(socket.InputStream), socket);
63                   });
64             }
65             catch (Exception ex)
66             {
67                 SocketErrorStatus status = SocketError.GetStatus(ex.HResult);
68             }
69         }
70
71         private async void ReceiveDataLoop(DataReader reader, StreamSocket streamSocket)
72         {
73             try
74             {
75                 await _reader.LoadAsync(sizeof(uint));
76                 uint size = _reader.ReadUInt32();
77                 await _reader.LoadAsync(size);
78                 //byte[] data = new byte[size];
79                 //reader.ReadBytes(data);
80                 string msg = _reader.ReadString(reader.UnconsumedBufferLength);
81                 ShowMessage(msg);
82                 ReceiveDataLoop(_reader, streamSocket);
83             }
84             catch (Exception ex)
85             {
86            
87             }
88         }
89
90         private void btnStopListen_Click(object sender, RoutedEventArgs e)
91         {
92             try
93             {
94                 _listener.Dispose();
95                 // reader.Dispose();
96                 btnListen.IsEnabled = true;
97                 btnStopListen.IsEnabled = false;
98             }
99             catch (Exception ex)
100             {
101                 var status = SocketError.GetStatus(ex.HResult);
102             }
103         }
104
105         ///
106         /// 开始连接服务器
107         ///
108         ///
109         ///
110         private async void btnConnect_Click(object sender, RoutedEventArgs e)
111         {
112             try
113             {
114                 _client = new StreamSocket();
115
116                 _client.Control.KeepAlive = true;
117                 _client.Control.NoDelay = true;
118                 _client.Control.QualityOfService = SocketQualityOfService.Normal;
119
120                 await _client.ConnectAsync(_localHostName, _localServerName);
121
122                 btnConnect.IsEnabled =false;
123                 btnDisconnect.IsEnabled = true;
124             }
125             catch (Exception ex)
126             {
127                 SocketErrorStatus status = SocketError.GetStatus(ex.HResult);
128             }
129         }
130
131         ///
132         /// 开始发送
133         ///
134         ///
135         ///
136         private async void btnSend_Click(object sender, RoutedEventArgs e)
137         {
138             try
139             {
140                 string sendMsg = tbInputMsg.Text.Trim();
141                 int strLength = sendMsg.Length;
142
143                 DataWriter writer = new DataWriter(_client.OutputStream);
144
145                 //注意一定要先发送要发送数据的长度
146                 writer.WriteInt32(strLength);
147                 writer.WriteString(sendMsg);
148                 await writer.StoreAsync();
149
150                 await _client.OutputStream.FlushAsync();
151
152                 tbSendMsg.Text += ("Send-->: " + tbInputMsg.Text + Environment.NewLine);
153                 tbInputMsg.Text = string.Empty;
154                 ////await _client.OutputStream.WriteAsync(GetBufferFromString(strLength.ToString()));
155                 //await _client.OutputStream.WriteAsync(GetBufferFromString(tbInputMsg.Text.Trim()));
156                 //await _client.OutputStream.FlushAsync();
157             }
158             catch (Exception ex)
159             {
160                 SocketErrorStatus status = SocketError.GetStatus(ex.HResult);
161             }
162         }
163
164         ///
165         /// 断开连接
166         ///
167         ///
168         ///
169         private void btnDisconnect_Click(object sender, RoutedEventArgs e)
170         {
171             try
172             {
173                 _client.Dispose();
174
175                 btnConnect.IsEnabled = true;
176                 btnDisconnect.IsEnabled = false;
177             }
178             catch (Exception ex)
179             {
180                 SocketErrorStatus status = SocketError.GetStatus(ex.HResult);
181             }
182         }
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69085-1-1.html 上篇帖子: win8 中如何删除 共享文件夹 用户名和密码 下篇帖子: win8/Metro开发系列二 Xaml数据绑定
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表