Mercurial > hg > Members > nobuyasu > tightVNCProxy
comparison src/myVncProxy/acceptClient.java @ 63:4864a7d1df00
add CreateThread.java modify acceptClient.java and VncProxyService.java
author | Yu Taninari <e085734@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Jul 2011 13:47:32 +0900 |
parents | 5953ac30cb20 |
children | 3ec4c9e94462 |
comparison
equal
deleted
inserted
replaced
62:7795e2b5d3ef | 63:4864a7d1df00 |
---|---|
4 import java.io.*; | 4 import java.io.*; |
5 import java.net.*; | 5 import java.net.*; |
6 import java.util.*; | 6 import java.util.*; |
7 | 7 |
8 public class acceptClient extends Thread { | 8 public class acceptClient extends Thread { |
9 ServerSocket echoServer=null; | 9 ServerSocket echoServer=null; |
10 // ソケットや入出力用のストリームの宣言 | 10 // ソケットや入出力用のストリームの宣言 |
11 String line,port,handover; | 11 String line,port,handover; |
12 BufferedReader is; | 12 BufferedReader is; |
13 PrintStream os; | 13 PrintStream os; |
14 Socket clientSocket = null; | 14 Socket clientSocket = null; |
15 int intv_time = 100; | 15 int intv_time = 100; |
16 int i = 0 , p = 0,t = 0; | 16 int i = 0 , p = 0,t = 0; |
17 //String[] sub = new String[100]; | 17 //String[] sub = new String[100]; |
18 LinkedList<String> ls = new LinkedList<String>(); | 18 LinkedList<String> ls = new LinkedList<String>(); |
19 String request,name; | 19 String request,name; |
20 int treebranch = 2;//treeの子ノードの数 | 20 int treebranch = 2;//treeの子ノードの数 |
21 String leaderflag="0",sendleaderflag="0"; | 21 String leaderflag="0",sendleaderflag="0"; |
22 boolean runflag =false,addrRegistor=true; | 22 boolean runflag =false,addrRegistor=true; |
23 BufferedReader temp = null;//一時的にisを保存する変数 | 23 BufferedReader temp = null;//一時的にisを保存する変数 |
24 | 24 CreateThread createThread; |
25 | 25 |
26 public acceptClient(String _name) { | 26 public acceptClient(String _name) { |
27 // TODO Auto-generated constructor stub | 27 // TODO Auto-generated constructor stub |
28 name = _name; | 28 name = _name; |
29 } | 29 } |
30 | 30 public acceptClient() { |
31 | 31 new CreateThread(this); |
32 public void run() { | 32 } |
33 | 33 |
34 while(true){ | 34 |
35 // ポート9999番を開く | 35 |
36 try { | 36 public synchronized void gethost(BufferedReader is,PrintStream os) { |
37 echoServer = new ServerSocket(9999); | 37 |
38 } | 38 //public synchronized void run () { |
39 catch (IOException e) { | 39 /* |
40 System.out.println(e); | 40 while(true){ |
41 } | 41 // ポート9999番を開く |
42 | 42 try { |
43 // クライアントからの要求を受けるソケットを開く | 43 echoServer = new ServerSocket(9999); |
44 try { | 44 } |
45 clientSocket = echoServer.accept(); | 45 catch (IOException e) { |
46 is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); | 46 System.out.println(e); |
47 os = new PrintStream(clientSocket.getOutputStream()); | 47 } |
48 | 48 |
49 // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す | 49 // クライアントからの要求を受けるソケットを開く |
50 while (true){ | 50 try { |
51 clientSocket = echoServer.accept(); | |
52 is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); | |
53 os = new PrintStream(clientSocket.getOutputStream()); | |
54 */ | |
55 // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す | |
56 try { | |
57 while (true){ | |
58 line = is.readLine(); | |
59 port = is.readLine(); | |
60 | |
61 System.out.println("データーを受信しましたlin="+line+" port="+port); | |
62 //自分の IPADRESSを取得する | |
63 InetAddress addr = InetAddress.getLocalHost(); | |
64 String add = new String(addr.getHostAddress()); | |
65 | |
66 if("1".equals(line)){ | |
67 System.out.println("親が落ちましたmessage" + port); | |
68 os.println(ls.getLast()); | |
69 handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); | |
70 String hidenchild=ls.getLast(); | |
71 String newparent=ls.get(Integer.parseInt(handover)); | |
72 ls.remove(Integer.parseInt(port)); | |
73 ls.add(Integer.parseInt(port),ls.getLast()); | |
74 ls.remove(Integer.parseInt(port)); | |
75 i--; | |
76 t++; | |
77 runflag = true; | |
78 if(t % treebranch == 0){ | |
79 p--; | |
80 } | |
81 if((i-1)%treebranch==1){ // children in most young treenum have leaderflag 1 other 0 | |
82 sendleaderflag = "1"; | |
83 }else{ | |
84 sendleaderflag = "0"; | |
85 } | |
86 | |
87 child child = new child(); | |
88 child.clost(hidenchild,newparent,os,port,handover,sendleaderflag,i); | |
89 os.println(port); | |
90 Thread.sleep(intv_time); | |
91 is.close(); | |
92 os.close(); | |
93 | |
94 }else if("2".equals(line)){ | |
95 System.out.println("子供が落ちましたmessage" + port); | |
96 //exit シグナルを送る | |
97 Thread.sleep(intv_time); | |
98 }else if("3".equals(line)){ | |
99 System.out.println("落ちたのを確認しました"); | |
100 | |
101 os.println(ls.get(Integer.parseInt(port))); | |
102 os.println(port); | |
103 line=null; | |
104 runflag = false; | |
105 is.close(); | |
106 os.close(); | |
107 }else{ | |
108 if(addrRegistor==true){ | |
109 ls.add(add); | |
110 addrRegistor = false; | |
111 } | |
112 System.out.println(p); | |
113 if(line != null){ | |
114 sock conf = new sock(); | |
115 conf.arg(line,ls); | |
116 i++; | |
117 }else{ | |
118 break; | |
119 } | |
120 | |
121 if(i>=treebranch+1){ | |
122 if((i-1)%treebranch==0){ | |
123 leaderflag = "1"; | |
124 }else{ | |
125 leaderflag = "0"; | |
126 } | |
127 if((i-1)%treebranch==0){ | |
128 p++; | |
129 } | |
130 // request = [p-1]; | |
131 request = ls.get(p); | |
132 os.println(request); | |
133 System.out.println("pの値="+p); | |
134 os.println(String.valueOf(p)); | |
135 System.out.println("iの値="+i); | |
136 os.println(String.valueOf(i)); | |
137 System.out.println("leaderflag="+leaderflag + "\n"); | |
138 os.println(leaderflag); | |
139 }else{ | |
140 //treeの親ノードに接続する人に接続する人を教える | |
141 | |
142 os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 | |
143 os.println("0"); | |
144 os.println(String.valueOf(i)); | |
145 os.println(leaderflag + "\n"); | |
146 } | |
147 Thread.sleep(intv_time); | |
148 } | |
149 } | |
150 | |
151 } catch (IOException e){ | |
152 System.out.println(e); | |
153 } | |
154 | |
155 catch(InterruptedException e){ | |
156 e.printStackTrace(); | |
157 } | |
51 /* | 158 /* |
52 if(runflag==false){ | 159 try{ |
53 temp = is; | 160 echoServer.close(); |
54 line = is.readLine(); | 161 } |
55 port = is.readLine(); | 162 catch (IOException e){ |
56 }else{ | 163 System.out.println(e); |
57 if(temp!=null){ | 164 } |
58 is = temp; | 165 */ |
59 } | 166 //} comment out while |
60 */ | 167 } |
61 line = is.readLine(); | 168 } |
62 port = is.readLine(); | 169 |
63 //} | 170 |
64 System.out.println("データーを受信しましたlin="+line+" port="+port); | 171 class sock{ |
65 //自分の IPADRESSを取得する | 172 void arg(String line,LinkedList<String> ls){ |
66 InetAddress addr = InetAddress.getLocalHost(); | 173 if(line != null){ |
67 String add = new String(addr.getHostAddress()); | 174 ls.add(line); |
68 | |
69 if("1".equals(line)){ | |
70 System.out.println("親が落ちましたmessage" + port); | |
71 os.println(ls.getLast()); | |
72 handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); | |
73 String hidenchild=ls.getLast(); | |
74 String newparent=ls.get(Integer.parseInt(handover)); | |
75 ls.remove(Integer.parseInt(port)); | |
76 ls.add(Integer.parseInt(port),ls.getLast()); | |
77 ls.remove(Integer.parseInt(port)); | |
78 i--; | |
79 t++; | |
80 runflag = true; | |
81 if(t % treebranch == 0){ | |
82 p--; | |
83 } | |
84 if((i-1)%treebranch==1){ | |
85 sendleaderflag = "1"; | |
86 }else{ | |
87 sendleaderflag = "0"; | |
88 } | |
89 /* | |
90 if(temp!=null){ | |
91 System.out.println("leaderに返信します"); | |
92 is =temp; | |
93 line = is.readLine(); | |
94 port = is.readLine(); | |
95 os.println(ls.get(Integer.parseInt(port))); | |
96 os.println(port); | |
97 runflag=false; | |
98 temp=null; | |
99 } | |
100 */ | |
101 | |
102 child child = new child(); | |
103 child.clost(hidenchild,newparent,os,port,handover,sendleaderflag,i); | |
104 os.println(port); | |
105 Thread.sleep(intv_time); | |
106 is.close(); | |
107 os.close(); | |
108 | |
109 }else if("2".equals(line)){ | |
110 System.out.println("子供が落ちましたmessage" + port); | |
111 //exit シグナルを送る | |
112 Thread.sleep(intv_time); | |
113 }else if("3".equals(line)){ | |
114 System.out.println("落ちたのを確認しました"); | |
115 | |
116 os.println(ls.get(Integer.parseInt(port))); | |
117 os.println(port); | |
118 line=null; | |
119 runflag = false; | |
120 is.close(); | |
121 os.close(); | |
122 }else{ | |
123 if(addrRegistor==true){ | |
124 ls.add(add); | |
125 addrRegistor = false; | |
126 } | |
127 System.out.println(p); | |
128 if(line != null){ | |
129 sock conf = new sock(); | |
130 conf.arg(line,ls); | |
131 i++; | |
132 }else{ | |
133 break; | |
134 } | |
135 | |
136 if(i>=treebranch+1){ | |
137 if((i-1)%treebranch==0){ | |
138 leaderflag = "1"; | |
139 }else{ | |
140 leaderflag = "0"; | |
141 } | |
142 if((i-1)%treebranch==0){ | |
143 p++; | |
144 } | |
145 // request = [p-1]; | |
146 request = ls.get(p); | |
147 os.println(request); | |
148 System.out.println("pの値="+p); | |
149 os.println(String.valueOf(p)); | |
150 System.out.println("iの値="+i); | |
151 os.println(String.valueOf(i)); | |
152 System.out.println("leaderflag="+leaderflag + "\n"); | |
153 os.println(leaderflag); | |
154 }else{ | |
155 //treeの親ノードに接続する人に接続する人を教える | |
156 | |
157 os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 | |
158 os.println("0"); | |
159 os.println(String.valueOf(i)); | |
160 os.println(leaderflag + "\n"); | |
161 } | |
162 Thread.sleep(intv_time); | |
163 } | |
164 } | 175 } |
165 }catch (IOException e){ | 176 int g=0; |
166 System.out.println(e); | 177 |
167 } | 178 for(String bs: ls){ |
168 catch(InterruptedException e){ | 179 System.out.println(g+"番目"+bs); |
169 e.printStackTrace(); | 180 g++; |
170 } | 181 } |
171 try{ | 182 } |
172 echoServer.close(); | |
173 } | |
174 catch (IOException e){ | |
175 System.out.println(e); | |
176 } | |
177 } | |
178 } | |
179 } | |
180 | |
181 | |
182 class sock{ | |
183 void arg(String line,LinkedList<String> ls){ | |
184 if(line != null){ | |
185 ls.add(line); | |
186 } | |
187 int g=0; | |
188 | |
189 for(String bs: ls){ | |
190 System.out.println(g+"番目"+bs); | |
191 g++; | |
192 } | |
193 } | |
194 } | 183 } |
195 | 184 |
196 class child{ | 185 class child{ |
197 Socket echoSocket; | 186 Socket echoSocket; |
198 DataOutputStream os = null; | 187 DataOutputStream os = null; |
199 BufferedReader is = null; | 188 BufferedReader is = null; |
200 void clost(String hiddenchild,String newparent,PrintStream rep,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ | 189 void clost(String hiddenchild,String newparent,PrintStream rep,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ |
201 try { | 190 try { |
202 | 191 |
203 System.out.println(hiddenchild + "に接続します"); | 192 System.out.println(hiddenchild + "に接続します"); |
204 echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 | 193 echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 |
205 | 194 |
206 os = new DataOutputStream(echoSocket.getOutputStream()); | 195 os = new DataOutputStream(echoSocket.getOutputStream()); |
207 is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); | 196 is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); |
208 | 197 |
209 os.writeBytes(newparent+"\n"); | 198 os.writeBytes(newparent+"\n"); |
210 os.writeBytes(newpnum+"\n"); | 199 os.writeBytes(newpnum+"\n"); |
211 os.writeBytes(newtreenum+"\n"); | 200 os.writeBytes(newtreenum+"\n"); |
212 os.writeBytes(newleaderflag+"\n"); | 201 os.writeBytes(newleaderflag+"\n"); |
213 | 202 |
214 /* | 203 } catch (UnknownHostException e) { |
215 rep.println(newparent); | 204 System.err.println("Don't know about host: localhost"); |
216 rep.println(newpnum); | 205 } catch (IOException e) { |
217 rep.println(newtreenum); | 206 System.err.println("Couldn't get I/O for the connection to: localhost"); |
218 rep.println(newleaderflag+"\n"); | 207 } |
219 | 208 |
220 rep.close(); | 209 } |
221 */ | |
222 } catch (UnknownHostException e) { | |
223 System.err.println("Don't know about host: localhost"); | |
224 } catch (IOException e) { | |
225 System.err.println("Couldn't get I/O for the connection to: localhost"); | |
226 } | |
227 | |
228 } | |
229 } | 210 } |