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 }