/*付録1 HybridP2P_Serverプログラム */ import java.io.*; import java.net.*; import java.util.*; public class Server { static int max = 10, no = 0, sw = 1; static Member mem[]; public static void main(String[] args) { int i1; int port = 50000; if (args.length < 1) { System.out.println("***error*** 参加者数を入力してください"); System.exit(1); } else { max = Integer.parseInt(args[0]); mem = new Member [max]; for (i1 = 0; i1 < max; i1++) mem[i1] = new Member(); try { ServerSocket s_s = new ServerSocket(port); System.out.println("Ready to get the List"); new Key().start(); for (;;) { Socket s = s_s.accept(); if (no == max) { PrintWriter out = new PrintWriter(s.getOutputStream(), true); s.close(); } else { System.out.println("現在の参加人数は"+(no+1)+"人です"); new Connect(s).start(); } } } catch (Exception e) { System.out.println(e); } } } } class Connect extends Thread { private Socket s; int n = -1; PrintWriter out; BufferedReader in; String address; LinkedList fileList = new LinkedList(); public Connect(Socket s_i) { int i1; s = s_i; Server.no++; for (i1 = 0; i1 < Server.max && n < 0; i1++) { if (Server.mem[i1].state == false) { Server.mem[i1].state = true; Server.mem[i1].s = s; n = i1; } } try { String bt; out = new PrintWriter(s.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(s.getInputStream())); Server.mem[n].out = out; Server.mem[n].fileList = fileList; Server.mem[n].name ="nanashi"; } catch (Exception e) { System.out.println(e); } } public void run() { int i1; String line=null; String ss; try { while (Server.mem[n].state) { line = in.readLine(); if (line.equals("Peer.quit")) { Server.mem[n].state = false; Server.no--; System.out.println("現在の参加人数は"+Server.no+"人です"); } else { fileList.add(line); if(line.equals("list_start")){ fileList.clear(); } if(line.equals("list_end")){ InetAddress addr =s.getInetAddress(); address=addr.getHostAddress(); fileList.add(0,"-------------------------------------------------------------"); fileList.add(1,address); out.println("s_list_start"); for(int s=0; s