Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.38 KB | None | 0 0
  1. <!-- language: c# -->
  2.  
  3. /**
  4. * 周りのデバイスが、自分を検索できるようにする
  5. */
  6. public void wifiAdvertisement()
  7. {
  8. publisher = new WiFiDirectAdvertisementPublisher();
  9. listener = new WiFiDirectConnectionListener();
  10.  
  11. try
  12. {
  13. listener.ConnectionRequested += OnConnectionRequest;
  14. }
  15. catch(Exception e)
  16. {
  17. NotifyUser("Wifi Directがサポートされてません。" + e.Message);
  18. return;
  19. }
  20.  
  21. publisher.Advertisement.IsAutonomousGroupOwnerEnabled = false;
  22. publisher.Advertisement.ListenStateDiscoverability = WiFiDirectAdvertisementListenStateDiscoverability.Normal;
  23. publisher.Start();
  24. }
  25.  
  26. /**
  27. * 周りのデバイスから接続要求が来た場合、
  28. * 応答する
  29. */
  30. private async void OnConnectionRequest(WiFiDirectConnectionListener sender, WiFiDirectConnectionRequestedEventArgs connEventArgs)
  31. {
  32. WiFiDirectConnectionRequest connReq = connEventArgs.GetConnectionRequest();
  33. NotifyUser($"Connection request from {connReq.DeviceInformation.Name}");
  34.  
  35. bool result = await Dispatcher.RunTaskAsync(async () =>
  36. {
  37. return await HandlerConnectionRequest(connReq);
  38. });
  39.  
  40. if (!result)
  41. {
  42. // 接続要求を拒否する
  43. NotifyUser($"Connection request from {connReq.DeviceInformation.Name} was declined");
  44. connReq.Dispose();
  45. }
  46. }
  47.  
  48. HostName hostname;
  49. HostName client;
  50. StreamSocket clientsocket;
  51. /**
  52. * 要求してきた相手の端末と接続する。
  53. */
  54. private async Task<bool> HandlerConnectionRequest(WiFiDirectConnectionRequest connReq)
  55. {
  56. string deviceName = connReq.DeviceInformation.Name;
  57.  
  58. NotifyUser($"Connecting to {deviceName}...");
  59. NotifyUser($"Connecting to {connReq.DeviceInformation.Id}...");
  60.  
  61. try
  62. {
  63. wfdDevice = await WiFiDirectDevice.FromIdAsync(connReq.DeviceInformation.Id);
  64. }
  65. catch (Exception e)
  66. {
  67. listener.ConnectionRequested -= OnConnectionRequest;
  68. publisher.Stop();
  69. NotifyUser($"Exception in FromIdAsync : {e.Message}");
  70. return false;
  71. }
  72.  
  73. publisher.Stop();
  74. NotifyUser("deviceInfo " + wfdDevice.ConnectionStatus);
  75.  
  76. wfdDevice.ConnectionStatusChanged += OnConnectionStatusChanged;
  77.  
  78. var EndpointPairs = wfdDevice.GetConnectionEndpointPairs();
  79. hostname = EndpointPairs[0].RemoteHostName;
  80. client = EndpointPairs[0].LocalHostName;
  81. NotifyUser("LocalHostName " + EndpointPairs[0].LocalHostName);
  82. NotifyUser("RemoteHostName " + EndpointPairs[0].RemoteHostName);
  83. NotifyUser("LocalServiceName " + EndpointPairs[0].LocalServiceName);
  84. NotifyUser("RemoteServiceName " + EndpointPairs[0].RemoteServiceName);
  85.  
  86. //listenerSocket = new StreamSocketListener();
  87.  
  88. //// Save this (listenerSocket, wfdDevice) pair so we can hook it up when the socket connection is made.
  89. //_pendingConnections[listenerSocket] = wfdDevice;
  90.  
  91. await Task.Delay(2000);
  92.  
  93. //clientsocket = new StreamSocket();
  94. //await clientsocket.ConnectAsync(hostname, "8988");
  95.  
  96. //Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  97. //serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8988));
  98.  
  99. //Stream streamOut = clientsocket.OutputStream.AsStreamForWrite();
  100. //StreamWriter writer = new StreamWriter(streamOut);
  101. //string ss = "a";
  102. //await writer.WriteLineAsync(ss);
  103. //await writer.FlushAsync();
  104. //NotifyUser("Stream a");
  105.  
  106. //DataWriter dw = new DataWriter(clientsocket.OutputStream);
  107. //dw.WriteUInt32(dw.MeasureString("A"));
  108. //await dw.StoreAsync();
  109. //await dw.FlushAsync();
  110. //NotifyUser("Stream A");
  111.  
  112.  
  113. //socketRw = new SocketReaderWriter(clientsocket, this);
  114.  
  115. //try
  116. //{
  117. // await socketRw.WriteMessageAsync(sessionId);
  118.  
  119. //}
  120. //catch (Exception e)
  121. //{
  122. // NotifyUser("socketRw.WriteMessageAsync" + e.Message);
  123. //}
  124.  
  125. //socketSend = new SocketSend(EndpointPairs[0].RemoteHostName+"", this);
  126. //socketSend.send(new byte[] { 0,0,0,0 });
  127.  
  128. listenerSocket.ConnectionReceived += OnSocketConnectionReceived;
  129. try
  130. {
  131. await listenerSocket.BindServiceNameAsync("8988");
  132. }
  133. catch (Exception ex)
  134. {
  135. NotifyUser($"connect operation threw an exception: {ex.Message}");
  136. return false;
  137. }
  138.  
  139. //NotifyUser($"Devices connected on L2, listening on IP Address: {EndpointPairs[0].LocalHostName}" + $" Port: {strServerPort}");
  140.  
  141. //await connDevice.SocketRW.WriteMessageAsync(new byte[] { 0,0,0,0});
  142. return true;
  143. }
  144.  
  145. private void OnConnectionStatusChanged(WiFiDirectDevice sender, object arg)
  146. {
  147. NotifyUser($"Connection status changed: {sender.ConnectionStatus}");
  148.  
  149. if (sender.ConnectionStatus == WiFiDirectConnectionStatus.Disconnected)
  150. {
  151. try
  152. {
  153. listener.ConnectionRequested -= OnConnectionRequest;
  154. wfdDevice.ConnectionStatusChanged -= OnConnectionStatusChanged;
  155. wfdDevice.Dispose();
  156. publisher.Stop();
  157. }
  158. catch (Exception e)
  159. {
  160. NotifyUser($"connDevice Closeing Error: {e.Message}");
  161. }
  162.  
  163. }
  164. }
  165.  
  166. private async void OnSocketConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
  167. {
  168.  
  169. Stream inStream = args.Socket.InputStream.AsStreamForRead();
  170. StreamReader reader = new StreamReader(inStream);
  171. string request = await reader.ReadLineAsync();
  172. //var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
  173. //{
  174. // NotifyUser("Connecting to remote side on L4 layer...");
  175. // StreamSocket serverSocket = args.Socket;
  176.  
  177. // SocketReaderWriter socketRW = new SocketReaderWriter(serverSocket, rootPage);
  178. // // The first message sent is the name of the connection.
  179. // string message = await socketRW.ReadMessageAsync();
  180.  
  181. // while (message != null)
  182. // {
  183. // message = await socketRW.ReadMessageAsync();
  184. // }
  185. //});
  186. }
  187.  
  188. protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
  189. {
  190. if (wfdDevice.ConnectionStatus == WiFiDirectConnectionStatus.Connected)
  191. {
  192. //ConnectedDevices.Remove(connDevice);
  193. //connDevice.Dispose();
  194. }
  195. listener.ConnectionRequested -= OnConnectionRequest;
  196. publisher.Stop();
  197. }
  198.  
  199. private async void SendBinaryTODO_Click(object sender, RoutedEventArgs e)
  200. {
  201. string text = "B";
  202.  
  203. try
  204. {
  205. await socketRw.WriteMessageAsync(text);
  206.  
  207. }
  208. catch (Exception ex)
  209. {
  210. NotifyUser("socketRw.WriteMessageAsync" + ex.Message);
  211. }
  212. }
  213.  
  214. private void SendBinaryTODO2_Click(object sender, RoutedEventArgs e)
  215. {
  216.  
  217. }
  218.  
  219. <!-- language: java -->
  220. public class FileReciverService extends IntentService {
  221. private boolean serviceEnabled;
  222. private int port;
  223. private ResultReceiver serverResult;
  224. private ServerSocket serverSocket = null;
  225.  
  226. public FileReciverService() {
  227. super("FileReciverService");
  228. serviceEnabled = true;
  229. }
  230.  
  231. @Override
  232. protected void onHandleIntent(Intent intent) {
  233.  
  234. port = ((Integer) intent.getExtras().get("port")).intValue();
  235. serverResult = (ResultReceiver) intent.getExtras().get(Const.EXTRAS_SERVER_RESULT);
  236.  
  237. ByteArrayOutputStream bout;
  238.  
  239. InputStream inputstream;
  240. byte [] buffer = new byte[512];
  241. try{
  242. serverSocket = new ServerSocket(8988);
  243. serverSocket.setReuseAddress(true);
  244. while(true && serviceEnabled){
  245.  
  246. if(serverSocket.isClosed()){
  247. break;
  248. }
  249.  
  250. Socket client = serverSocket.accept();
  251.  
  252. bout = new ByteArrayOutputStream();
  253. inputstream = new DataInputStream(client.getInputStream());
  254. byte[] clientIp = client.getInetAddress().getAddress();
  255.  
  256. while (true){
  257. int len = inputstream.read(buffer);
  258. if(len < 0) break;
  259. bout.write(buffer, 0, len);
  260. }
  261. System.arraycopy(clientIp,0, buffer, 4, clientIp.length);
  262.  
  263. inputstream.close();
  264. bout.close();
  265. client.close();
  266. signalActivity("result", buffer);
  267. }
  268.  
  269. }catch (Exception e){
  270. Log.e("doInBackground Error ",e.getMessage());
  271. }
  272. }
  273.  
  274. public void signalActivity(String key, byte[] message) {
  275. Bundle b = new Bundle();
  276. b.putByteArray(key, message);
  277. serverResult.send(port, b);
  278. }
  279.  
  280. @Override
  281. public void onDestroy() {
  282. serviceEnabled = false;
  283. if(serverSocket != null){
  284. if(!serverSocket.isClosed()){
  285. try {
  286. serverSocket.close();
  287. } catch (IOException e) {
  288. e.printStackTrace();
  289. }
  290. }
  291. }
  292. stopSelf();
  293. }
  294.  
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement