/*付録2 HybridP2P_Peerプログラム*/ import java.io.*; import java.net.*; import java.util.*; public class Peer { static int max_u = 0, max_d = 0, no_u = 0, no_d = 0, sw = 1; static String pass_up = "./file_up/"; static String pass_down = "./file_down/"; static Member mem[]; static Socket s_s; static int port; static LinkedList s_fileList = new LinkedList(); static String dottedline = "-------------------------------------------------------------"; public static void main(String[] args) { int i1; int s_port=50000; //リスト転送用ポート if (args.length < 1) { System.out.println("サーバーのアドレスを入力してください"); System.exit(1); } else { max_u = 2; //最大同時送信数 max_d = 2; //最大同時受信数 mem = new Member [max_u]; for (i1 = 0; i1 < max_u; i1++) mem[i1] = new Member(); try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); BufferedReader fin_port = new BufferedReader(new FileReader("port.txt")); /*ファイル転送ようポートの設定*/ System.out.println("ファイル転送用ポートの変更をしますか? yes/no"); String port_line; port_line = in.readLine(); if (port_line.equals("yes")) { PrintWriter fout_port = new PrintWriter(new BufferedWriter(new FileWriter("port.txt"))); do{ System.out.println("注:10000以上でお願いします。"); port = Integer.parseInt(in.readLine()); }while(port<10000 || 65535= 0) { file_out.write(bt); k++; } file_out.flush(); s.close(); Peer.no_u--; } catch (Exception e) { System.out.println("Connect_002:"+e); try { s.close(); } catch (Exception e2) { System.out.println("Connect_003:"+e); } } } } class Key extends Thread { public void run() { int i1; String line; String file_name=null; String s_list; long k = 0; int bt; LinkedList fileList = new LinkedList(); LinkedList s_fileList2 = new LinkedList(); Iterator s_fileList_itr; try { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (Peer.no_u > -1) { System.out.println("*****************************************"); System.out.println("*************入力待ち********************"); line = in.readLine(); if (line.equals("0")) { System.out.println("<終了>"); System.out.println("*****************************************"); PrintWriter out = new PrintWriter(Peer.s_s.getOutputStream(), true); out.println("Peer.quit"); System.exit(1); } else if (line.equals("1")) { System.out.println("<検索>"); kensaku ken = new kensaku(); ken.run(); } else if (line.equals("2")) { System.out.println("<ファイルリスト出力>"); LinkedList s_fileList = (LinkedList)Peer.s_fileList.clone(); for(int n=0; n"); youkyuu you = new youkyuu(); you.run(); } else { System.out.println("<入力ミス>"); System.out.println("0:終了 1:検索 2:ファイルリスト出力 3:ファイル要求"); } } } catch (IOException e) { System.out.println("key:" + e); System.exit(1); } } } class kensaku { kensaku() { } public void run() { int i1; String pass_up = Peer.pass_up; String s_list; long k = 0; int bt; LinkedList fileList = new LinkedList(); LinkedList s_fileList = new LinkedList(); LinkedList s_fileList2 = new LinkedList(); Iterator s_fileList_itr; LinkedList List2 = new LinkedList(); try{ File directory; File myFile; try { directory = new File(pass_up); } catch (Exception e) { directory = new File("./"); } String list[] = directory.list(); PrintWriter out_list = new PrintWriter(Peer.s_s.getOutputStream(), true); BufferedReader in_list = new BufferedReader(new InputStreamReader(Peer.s_s.getInputStream())); fileList.add("list_start"); fileList.add(""+Peer.port); for(int n=0; n 0){ fileList.add(list[n]); } } fileList.add("list_end"); try{ for(int n=0; n= Peer.max_d){ System.out.println("同時受信数の限界を超えています。"); break if_break1; } String addr=null; int port=30000; Socket file_s; int n=-1,n2=0; do{ System.out.println(":ファイル名入力"); file_name = in.readLine(); if(file_name.equals("")) break if_break1; n=s_fileList.indexOf(file_name); if(n == -1){ System.out.println("入力したファイル名はリストに存在しません。"); System.out.println("注:大文字と小文字を区別してください。何も入力ぜずにEnterキーを押すとファイル要求は中止されます。"); } }while(n==-1); s_fileList2=(LinkedList)s_fileList.clone(); do{ n2=s_fileList2.lastIndexOf(Peer.dottedline); s_fileList2.remove(n2); }while(n= 0) { file_out_f.write(bt); k++; } file_out_f.close(); Peer.no_d--; System.out.println(file_name + ":" + k + "バイト受け取りました。"); if(k==0){ System.out.println("相手の同時転送数を超えている可能性があります。"); } file_s.close(); k=0; } catch (Exception e) { Peer.no_d--; System.out.println("Reception:"+e); } } }