Mercurial > hg > Members > riono > TreeVNC_ja_comment
annotate src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java @ 83:40d400a7ec84
remove warnings
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 30 Apr 2014 18:07:20 +0900 |
parents | cc72fdbb7c72 |
children | 775ce6a14f89 |
rev | line source |
---|---|
12 | 1 package jp.ac.u_ryukyu.treevnc.server; |
11 | 2 |
3 import java.io.IOException; | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
4 import java.io.PrintStream; |
11 | 5 import java.net.DatagramPacket; |
6 import java.net.InetAddress; | |
7 import java.net.MulticastSocket; | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
8 import java.net.Socket; |
11 | 9 import java.net.SocketAddress; |
13 | 10 import java.net.UnknownHostException; |
11 | 11 |
82 | 12 import com.glavsoft.viewer.swing.ConnectionParams; |
13 | |
11 | 14 //import TextBoxProxy; |
15 | |
16 public class GetBroadCastProxy implements Runnable { | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
17 public static final String McastAddr = "224.0.0.1"; |
11 | 18 static final int BufSize = 1024; |
19 private boolean stopFlag = false; | |
20 private VncProxyService vps; | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
21 public static String MULTICAST_FIND_TREEVNC_ROOT = "TREEVNC-who:"; |
69 | 22 private MulticastSocket soc; |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
23 private String bCast; |
11 | 24 |
13 | 25 public GetBroadCastProxy(VncProxyService _vps,String desktopName,String host){ |
80
2951dd85e9fc
connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
78
diff
changeset
|
26 String myaddress = getMyAddress(); |
2951dd85e9fc
connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
78
diff
changeset
|
27 // getMyAddress is not always connectable eg. in private segment. |
11 | 28 vps = _vps; |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
29 bCast = vps.getRfb().getAcceptPort()+":"+host+":" |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
30 +desktopName+":"+myaddress+":"; |
11 | 31 } |
32 | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
33 /** |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
34 * To find TreeVNC root, a client sends me a multicast, reply our address to him. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
35 * It contains a port to receive, so multiple TREEVNC clients can run on a PC. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
36 */ |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
37 private void replyToRootSearchMulticast() { |
55 | 38 byte[] buf = new byte[BufSize]; |
11 | 39 try { |
40 InetAddress mAddr = InetAddress.getByName(McastAddr); | |
82 | 41 soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_ROOT_FINDER); |
11 | 42 DatagramPacket recvPacket = new DatagramPacket(buf, BufSize); |
43 soc.joinGroup(mAddr); | |
55 | 44 while (!stopFlag) { |
11 | 45 soc.receive(recvPacket); |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
46 String address = getAddress(recvPacket.getSocketAddress()); |
82 | 47 byte[] reply = recvPacket.getData(); |
48 int len = recvPacket.getLength(); | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
49 int i = 0; |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
50 for(byte b : MULTICAST_FIND_TREEVNC_ROOT.getBytes()) { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
51 if (b != reply[i]) return; |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
52 i++; |
82 | 53 if (i>len) return; |
11 | 54 } |
82 | 55 int port = parse_code(reply,i,len); |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
56 replyToClient(address,port,bCast); |
38 | 57 if(stopFlag) break; |
11 | 58 } |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
59 } catch (Exception e) { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
60 |
11 | 61 } |
62 } | |
63 | |
82 | 64 public int parse_code( byte[] bs,int offset,int len ) |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
65 { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
66 int intval = 0; |
82 | 67 for( int i = offset; i < len ; i++ ) { |
68 if (bs[i]==0 ) return intval; | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
69 intval = intval * 10 + ( bs[ i ] - '0' ); |
82 | 70 } |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
71 return intval; |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
72 } |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
73 |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
74 |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
75 /** |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
76 * To find me (TreeVNC root) ,a client send a broadcast with port number. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
77 * Send the parameter to connect to him. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
78 * The client's GetDataClient will receive this message. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
79 * |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
80 * @param addr |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
81 * @param port |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
82 * @param str |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
83 */ |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
84 private void replyToClient(String addr, int port_,String str_) { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
85 final String address = addr; |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
86 final int port = port_; |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
87 final String str = str_; |
11 | 88 Runnable sender = new Runnable() { |
89 public void run() { | |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
90 |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
91 try { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
92 Thread.sleep(1000); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
93 Socket socket = new Socket(address, port); // This is a TCP stream to reply |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
94 PrintStream os = new PrintStream(socket.getOutputStream()); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
95 os.println(str); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
96 os.print(Integer.toString(port)); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
97 os.close(); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
98 socket.close(); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
99 } catch (IOException e) { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
100 System.out.println("Connection faild"); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
101 } catch (InterruptedException e) { |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
102 System.out.println("Connection faild"); |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
103 } |
11 | 104 } |
105 }; | |
106 new Thread(sender).start(); | |
107 } | |
108 | |
109 private String getAddress(SocketAddress addr) { | |
110 String str = addr.toString(); | |
111 str = str.substring(1,str.indexOf(":")); | |
112 return str; | |
113 } | |
55 | 114 |
11 | 115 public void run() { |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
116 replyToRootSearchMulticast(); |
11 | 117 } |
118 | |
119 public void setStopFlag(boolean stopFlag) { | |
120 this.stopFlag = stopFlag; | |
121 } | |
122 | |
123 public boolean isStopFlag() { | |
124 return stopFlag; | |
125 } | |
13 | 126 |
81
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
127 /** |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
128 * getLocalHost() returns hostname's address. It may not connectable, but |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
129 * it gives readable hostname. Do not use it to connect. |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
130 * @return |
f93d0286c2ab
root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
80
diff
changeset
|
131 */ |
13 | 132 String getMyAddress () { |
133 InetAddress addr = null; | |
134 try { | |
135 addr = InetAddress.getLocalHost(); | |
136 } catch (UnknownHostException e) { | |
80
2951dd85e9fc
connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
78
diff
changeset
|
137 return "localhost"; |
13 | 138 } |
80
2951dd85e9fc
connect to real connection address instead of bad getLocalAddress().
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
78
diff
changeset
|
139 return addr.getHostAddress(); |
13 | 140 } |
11 | 141 } |