annotate src/myVncProxy/acceptClient.java @ 79:925d8b3eecd5

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