|
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 }
|
|
|