Advertisement
Guest User

Untitled

a guest
Oct 31st, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.08 KB | None | 0 0
  1. import com.sun.jdi.InterfaceType;
  2.  
  3. import javax.swing.event.MouseInputListener;
  4. import java.net.*;
  5. import java.io.*;
  6. import java.rmi.*;
  7. import java.util.ArrayList;
  8. import java.util.Scanner;
  9.  
  10. public class MulticastServer extends Thread {
  11. private String MULTICAST_ADDRESS = "224.3.2.3";
  12. private String RMI_ADDRESS = "224.3.2.2";
  13.  
  14. private int PORT = 4321;
  15. private int RMI_PORT = 4322;
  16. private int RMI_PORT_ONLINE = 2222;
  17. private long SLEEP_TIME = 5000;
  18. public static int id;
  19. public ArrayList<Utilizador> users = new ArrayList<Utilizador>();
  20. public ArrayList<Artista> artistas = new ArrayList<Artista>();
  21.  
  22.  
  23. public static void main(String[] args) {
  24. MulticastServer server = new MulticastServer();
  25. server.start();
  26. }
  27.  
  28.  
  29. public void run() {
  30.  
  31.  
  32.  
  33. artistas=leArtista();
  34. users=leUtilizadores();
  35. //users.add(new Utilizador("admin","admin"));
  36. //users.get(0).editor=1;
  37. for (Utilizador u : users){
  38. System.out.println(u.username);
  39. }
  40.  
  41. System.out.println("Numero deste servidor ? : ");
  42. Scanner sc= new Scanner(System.in);
  43. this.id = sc.nextInt();
  44. new TCPServer(id).start();
  45.  
  46. MulticastSocket socket = null;
  47. long counter = 0;
  48. System.out.println("Server " + this.id + " running...");
  49. try {
  50. socket = new MulticastSocket(PORT); // create socket without binding it (only for sending)
  51. InetAddress group = InetAddress.getByName(MULTICAST_ADDRESS);
  52. socket.joinGroup(group);
  53.  
  54.  
  55. while (true) {
  56.  
  57.  
  58. byte[] buffer = new byte[256];
  59.  
  60. DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
  61. socket.receive(packet);
  62. String message = new String(packet.getData(), 0, packet.getLength());
  63.  
  64. System.out.println(message);
  65. String[] result = message.split(";");
  66. String[] pref = result[0].split("\\|");
  67. DatagramSocket aSocket = null;
  68. DatagramSocket socketOnline = null;
  69. try {
  70. aSocket = new DatagramSocket();
  71. socketOnline = new DatagramSocket();
  72. String stringEnviar="";
  73. String processada="";
  74. if(pref[1].equals("null")){ // para verificar
  75. stringEnviar+="sv|"+Integer.toString(id);
  76. if (result[1].split("\\|")[1].equals("check_online")){
  77. processada=processaType(result);
  78. enviarOnline(socketOnline,packet.getAddress(),stringEnviar+processada);
  79. }
  80. else {
  81. if (!result[1].split("\\|")[1].equals(Integer.toString(id))){
  82. String[] copia = new String [result.length-1];
  83. for (int i =0 ; i< copia.length;i++){
  84. copia[i]=result[i+1];
  85. }
  86. processaType(copia);
  87. }
  88.  
  89. }
  90.  
  91. }
  92. else if(Integer.parseInt(pref[1])==id){
  93. //stringEnviar+="sv|"+Integer.toString(id)+";username|"+result[1].split("\\|")[1];
  94. stringEnviar+="sv|"+Integer.toString(id);
  95. enviaParaRmi(aSocket,packet.getAddress(),stringEnviar+processaType(result));
  96.  
  97. // // parte de enviar para os outros servidores multicast
  98. String stringNova = "sv|null;sv_sender|"+id;
  99. for (int i=1;i<result.length;i++){
  100. stringNova+=";"+result[i];
  101. }
  102.  
  103. byte[] buffer2 = stringNova.getBytes();
  104. DatagramPacket packet2 = new DatagramPacket(buffer2, buffer2.length, InetAddress.getByName(MULTICAST_ADDRESS),PORT);
  105. socket.send(packet2);
  106. }
  107. /* Nao considerar os casos fora do protocolo ?
  108.  
  109. else{
  110. }
  111. */
  112. escreveArtistas(artistas);
  113. escreveUtilizadores(users);
  114.  
  115. }
  116. catch (SocketException e){
  117. System.out.println("Socket: " + e.getMessage());
  118. }
  119. catch (NumberFormatException n){
  120. System.out.println("Nao foi possivel fazer parseInt da mensagem"); // nao esta a dar bem
  121. }
  122.  
  123. }
  124. } catch (IOException e) {
  125. e.printStackTrace();
  126. } finally {
  127. socket.close();
  128. }
  129. }
  130. public void enviaParaRmi(DatagramSocket aSocket, InetAddress address, String stringEnviar){
  131.  
  132. try {
  133. byte[] buffer2 = stringEnviar.getBytes();
  134. DatagramPacket packet2 = new DatagramPacket(buffer2, buffer2.length, address,RMI_PORT);
  135. aSocket.send(packet2);
  136. } catch (IOException e) {
  137. e.printStackTrace();
  138. }
  139. }
  140. public void enviarOnline(DatagramSocket socketOnline, InetAddress address, String stringEnviar){
  141.  
  142. try {
  143. byte[] buffer2 = stringEnviar.getBytes();
  144. DatagramPacket packet2 = new DatagramPacket(buffer2, buffer2.length, address,RMI_PORT_ONLINE);
  145. socketOnline.send(packet2);
  146. } catch (IOException e) {
  147. e.printStackTrace();
  148. }
  149. }
  150.  
  151.  
  152. public String processaType(String[] result){
  153. String[] type = result[1].split("\\|");
  154. System.out.println(type[1]);
  155. if (type[1].equals("login")){
  156.  
  157. String[] password= result[3].split("\\|");
  158. String[] username= result[2].split("\\|");
  159.  
  160. return ";type|login;success|"+login(username[1],password[1]);
  161. }
  162. else if (type[1].equals("add_artist")){
  163. String[] artista= result[2].split("\\|");
  164. String[] desc= result[3].split("\\|");
  165. return adicionaArtista(artista[1],desc[1]);
  166.  
  167. }
  168. else if (type[1].equals("register")){
  169.  
  170. String[] username= result[2].split("\\|");
  171. String[] password= result[3].split("\\|");
  172.  
  173. return register(username[1],password[1]);
  174. }
  175. else if (type[1].equals("queary_artist")){
  176. String[] nome_artista= result[2].split("\\|");
  177. return consultaPorArtista(nome_artista[1]);
  178. }
  179. else if (type[1].equals("add_album")){
  180. String[] nome_editor= result[2].split("\\|");
  181. String[] nome_artista= result[3].split("\\|");
  182. String[] nome_album= result[4].split("\\|");
  183. String[] descricao= result[5].split("\\|");
  184. return adicionaAlbum(nome_editor[1],nome_artista[1],nome_album[1],descricao[1]);
  185.  
  186. }
  187. else if (type[1].equals("add_song")){
  188. String[] nome_artista= result[2].split("\\|");
  189. String[] nome_album= result[3].split("\\|");
  190. String[] nome_musica= result[4].split("\\|");
  191. String[] duracao= result[5].split("\\|");
  192. return adicionaMusica(nome_artista[1],nome_album[1],nome_musica[1],duracao[1]);
  193.  
  194. }
  195. else if (type[1].equals("queary_album")){
  196. String[] nome_artista= result[2].split("\\|");
  197. String[] nome_album= result[3].split("\\|");
  198. return consultaPorAlbum(nome_artista[1],nome_album[1]);
  199. }
  200. else if (type[1].equals("search")){
  201. String[] word= result[2].split("\\|");
  202. return pesquisaPorAlbumArtistaMusica(word[1]);
  203. }
  204. else if (type[1].equals("check_online")){
  205. return ";type|online";
  206.  
  207. }
  208. else if (type[1].equals("give_privelege")){
  209. String[] name =result[2].split("\\|");
  210. return givePrivelege(name[1]);
  211.  
  212. }
  213. else if (type[1].equals("check_admin")){
  214. String[] name =result[2].split("\\|");
  215. return checkAdmin(name[1]);
  216. }
  217. else if (type[1].equals("write_critic")){
  218. String[] user =result[2].split("\\|");
  219. String[] nameArtist =result[3].split("\\|");
  220. String[] nameAlbum =result[4].split("\\|");
  221. String[] score =result[5].split("\\|");
  222. String[] critic =result[6].split("\\|");
  223.  
  224. return escreveCritica(user[1],nameArtist[1],nameAlbum[1],Integer.parseInt(score[1]),critic[1]);
  225. }
  226. else if (type[1].equals("edit_album")){
  227. String[] editor =result[2].split("\\|");
  228. String[] nameArtist =result[3].split("\\|");
  229. String[] nameAlbum =result[4].split("\\|");
  230. String[] newAlbumName =result[5].split("\\|");
  231. String[] desc =result[6].split("\\|");
  232.  
  233. return editAlbum(editor[1],nameArtist[1],nameAlbum[1],newAlbumName[1],desc[1]);
  234. }
  235. else if (type[1].equals("edit_artist")){
  236. String[] name =result[2].split("\\|");
  237. String[] new_name =result[3].split("\\|");
  238. String[] new_desc =result[4].split("\\|");
  239.  
  240. return editArtist(name[1],new_name[1],new_desc[1]);
  241. }
  242. else if (type[1].equals("remove_artist")){
  243. String[] name =result[2].split("\\|");
  244. return removeArtist(name[1]);
  245. }
  246. else if (type[1].equals("remove_album")){
  247. String[] artist_name =result[2].split("\\|");
  248. String[] album_name =result[3].split("\\|");
  249. return removeAlbum(artist_name[1],album_name[1]);
  250. }
  251. else if (type[1].equals("remove_song")){
  252. String[] artist_name =result[2].split("\\|");
  253. String[] album_name =result[3].split("\\|");
  254. String[] song_name =result[4].split("\\|");
  255. return removeSong(artist_name[1],album_name[1],song_name[1]);
  256. }
  257. else if (type[1].equals("download")){
  258. String[] song_name =result[2].split("\\|");
  259. String[] port =result[2].split("\\|");
  260. return enviaMusica(song_name[1],port[1]);
  261. }
  262.  
  263. return null;
  264. }
  265. public String login(String username,String password){
  266. for (Utilizador user:users){
  267. if (user.username.equals(username)){
  268. if (user.password.equals(password)){
  269. System.out.println("Login de "+username);
  270. return "true";
  271. }
  272. }
  273. }
  274. System.out.println("Tentiva de login falhada");
  275. return "false";
  276. }
  277. public String register(String username,String password){
  278. if (checkRegister(username)){
  279. users.add(new Utilizador(username,password));
  280. System.out.println("Novo utilizador "+username);
  281. return ";success|true";
  282. }
  283. return ";success|false";
  284.  
  285. }
  286. public String adicionaArtista(String nome,String desc){
  287. if (checkArtist(nome)){
  288. artistas.add(new Artista(nome,desc));
  289. System.out.println("Artista " + nome + " adicionado");
  290. return ";success|true";
  291. }
  292. return ";success|false";
  293. }
  294. public String adicionaAlbum(String nomeEditor,String nome_artista,String nome_album,String descricao) {
  295. for(Artista art : artistas ){
  296. if (art.nome.equals(nome_artista)){
  297.  
  298. art.albuns.add(new Album(nome_album,descricao,nomeEditor));
  299. System.out.println("Album adicionado");
  300. return ";success|true";
  301. }
  302. }
  303. return ";success|false";
  304. }
  305. public String adicionaMusica(String nomeArtista,String nomeAlbum,String nomeMusica,String duracao){
  306.  
  307. for (Artista art :artistas){
  308. if (art.nome.equals(nomeArtista)){
  309. for (Album alb :art.albuns){
  310. if (alb.nome.equals(nomeAlbum)){
  311. alb.musicas.add(new Musica(nomeMusica,Float.parseFloat(duracao)));
  312. return ";success|true";
  313. }
  314.  
  315. }
  316. return ";success|false";
  317. }
  318. }
  319. return ";success|false";
  320.  
  321.  
  322.  
  323. }
  324. public String consultaPorArtista(String nomeArtista){
  325. String stRetornar="";
  326. for (Artista art : artistas){
  327. if(art.nome.equals(nomeArtista)){
  328. stRetornar+=";desc|"+art.des;
  329. int intAlb=0;
  330. stRetornar +=";num_albuns|"+art.albuns.size();
  331. for(Album album : art.albuns){
  332. int intMus=0;
  333. stRetornar+=";alb_"+intAlb+"_name|"+album.nome;
  334. //stRetornar+=";desc|"+album.descricao;
  335. stRetornar+=";num_mus|"+album.musicas.size();
  336.  
  337. for (Musica mus: album.musicas){
  338. stRetornar+=";mus_"+intMus+"_name";
  339. stRetornar+="|"+mus.nome;
  340. intMus++;
  341. }
  342. intAlb++;
  343. }
  344. return ";success|true"+stRetornar;
  345. }
  346. }
  347. return ";success|false";
  348. }
  349. public String consultaPorAlbum(String nomeArtista,String nomeAlbum){
  350. String adicionar="";
  351. String preAdicionar="";
  352. for (Artista art :artistas){
  353. if (art.nome.equals(nomeArtista)){
  354. for (Album alb :art.albuns){
  355. if (alb.nome.equals(nomeAlbum)){
  356. adicionar+=";album_name|"+alb.nome;
  357. adicionar+=";art_name|"+art.nome;
  358. adicionar+=";desc|"+alb.descricao;
  359. adicionar+=";avg|"+String.valueOf(alb.mediaCriticas());
  360. adicionar+=";num_crits|"+alb.criticas.size();
  361. int numCrit=0;
  362. for (Critica critica:alb.criticas){
  363. adicionar+=";crit_"+numCrit+"|"+critica.just;
  364. numCrit++;
  365. }
  366. adicionar+=";num_mus|"+alb.musicas.size();
  367. int numMusicas=0;
  368. for (Musica mus: alb.musicas){
  369. adicionar+=";num_mus"+numMusicas+"|"+mus.nome;
  370. adicionar+=";dur_"+numMusicas+"|"+Float.toString(mus.duracao);
  371. numMusicas++;
  372. }
  373. }
  374. }
  375. break;
  376. }
  377. }
  378. if (adicionar.equals("")){ // nao foi encontrado nenhum album
  379. return ";success|false";
  380. }
  381. return ";success|true"+preAdicionar+adicionar;
  382. }
  383. public String pesquisaPorAlbumArtistaMusica(String nome){
  384.  
  385. int numArtistas=0;
  386. String adicionarArtistas="";
  387. String preAdicionarArtistas="";
  388. for (Artista art:artistas){
  389. String[] artNome = art.nome.split(" ");
  390. for (String sub: artNome){
  391. if (sub.equals(nome)){
  392. adicionarArtistas+=";artist_"+numArtistas+"_name|"+art.nome;
  393. numArtistas++;
  394. }
  395. }
  396. }
  397. preAdicionarArtistas+=";num_artists|"+numArtistas;
  398.  
  399. String adicionarAlbuns="";
  400. String preAdicionarAlbuns="";
  401. int numAlbuns=0;
  402. for(Artista art:artistas){
  403. for (Album alb :art.albuns){
  404. String[] albNome = alb.nome.split(" ");
  405. for(String sub : albNome){
  406. if (sub.equals(nome)){
  407. adicionarAlbuns+=";album_"+numAlbuns+"_name|"+alb.nome;
  408. numAlbuns++;
  409. }
  410. }
  411. }
  412. }
  413. preAdicionarAlbuns+=";num_albuns|"+numAlbuns;
  414.  
  415. String adicionarMusicas="";
  416. String preAdicionarMusicas="";
  417. int numMusicas=0;
  418. for(Artista art:artistas){
  419. for (Album alb :art.albuns){
  420. for (Musica mus:alb.musicas){
  421. String[] musNone = mus.nome.split(" ");
  422. for (String sub : musNone){
  423. if (sub.equals(nome)){
  424. adicionarMusicas+=";music_"+numMusicas+"_name|"+mus.nome;
  425. numMusicas++;
  426. }
  427. }
  428. }
  429. }
  430. }
  431. preAdicionarMusicas+=";num_musics|"+numMusicas;
  432.  
  433. if (adicionarAlbuns.equals("")&&adicionarArtistas.equals("")&&adicionarMusicas.equals("")){ // nao foi encontrado nenhum album
  434. return ";success|false";
  435. }
  436. return ";success|true"+preAdicionarArtistas+adicionarArtistas+preAdicionarAlbuns+adicionarAlbuns+preAdicionarMusicas+adicionarMusicas;
  437.  
  438. }
  439. public String escreveCritica(String user,String artista,String nomeAlbum ,int pontuacao,String des){
  440. for (Artista art :artistas){
  441. if (art.nome.equals(artista)){
  442. for (Album alb : art.albuns){
  443. if (alb.nome.equals(nomeAlbum)){
  444. alb.criticas.add(new Critica(user,pontuacao,des));
  445. return ";success|true";
  446. }
  447. }
  448. }
  449. }
  450. return ";success|false";
  451. }
  452. public String givePrivelege(String nome){
  453. for (Utilizador user : users){
  454. if (user.username.equals(nome)){
  455. user.editor=1;
  456. return ";success|true";
  457. }
  458. }
  459. return ";success|false";
  460. }
  461. public String checkAdmin(String nome){
  462. for (Utilizador user : users){
  463. if (user.username.equals(nome)){
  464. if(user.editor==1){
  465. return ";check_admin|true";
  466. }
  467. return ";check_admin|false";
  468. }
  469. }
  470. return ";check_admin|false";
  471. }
  472. public boolean checkRegister(String nome){
  473. for (Utilizador u: users){
  474. if (u.username.equals(nome)){
  475. return false;
  476. }
  477. }
  478. return true;
  479. }
  480. public boolean checkArtist(String nome){
  481. for (Artista art:artistas){
  482. if (art.nome.equals(nome)){
  483. return false;
  484. }
  485. }
  486. return true;
  487. }
  488. public String editAlbum(String nomeEditor, String nomeArtista,String nomeAlbum ,String novoNome, String novaDescricao){
  489. String adicionar="";
  490. for(Artista art:artistas ){
  491. if (art.nome.equals(nomeArtista)){
  492. for (Album alb:art.albuns){
  493. if (alb.nome.equals(nomeAlbum)){
  494. alb.nome=novoNome;
  495. alb.descricao=novaDescricao;
  496. adicionar+=";success|true";
  497. if (alb.editores.contains(nomeEditor)){
  498. alb.editores.remove(nomeEditor);
  499. }
  500. adicionar+=";num_editors|"+alb.editores.size();
  501. int numEditores =0;
  502. for(String edit: alb.editores){
  503. adicionar+=";editor_"+numEditores+"|"+edit;
  504. numEditores++;
  505. }
  506. alb.editores.add(nomeEditor);
  507. return adicionar;
  508.  
  509. }
  510. return ";success|false";
  511. }
  512. }
  513. }
  514. return ";success|false";
  515. }
  516. public String editArtist(String name,String new_name, String new_desc){
  517. for (Artista art: artistas){
  518. if (art.nome.equals(name)){
  519. art.nome=new_name;
  520. art.des=new_desc;
  521. return ";success|true";
  522. }
  523. }
  524. return ";success|false";
  525. }
  526. public String removeArtist(String name){
  527. for (Artista art: artistas){
  528. if (art.nome.equals(name)){
  529. artistas.remove(art);
  530. return ";success|true";
  531. }
  532. }
  533. return ";success|false";
  534. }
  535. public String removeAlbum(String artist_name,String album_name){
  536. for (Artista art: artistas){
  537. if (artist_name.equals(art.nome)){
  538. for (Album alb:art.albuns){
  539. if (alb.nome.equals(album_name)){
  540. art.albuns.remove(alb);
  541. return ";success|yes";
  542. }
  543. }
  544. return ";success|no";
  545. }
  546.  
  547.  
  548. }
  549. return ";success|no";
  550. }
  551. public String removeSong(String artist_name,String album_name,String song_name){
  552. for (Artista art:artistas){
  553. if (art.nome.equals(artist_name)){
  554. for (Album alb: art.albuns){
  555. if (alb.nome.equals(album_name)){
  556. for (Musica mus:alb.musicas){
  557. if (mus.nome.equals(song_name)){
  558. alb.musicas.remove(mus);
  559. return ";success|true";
  560. }
  561. }
  562. return ";success|false";
  563. }
  564. }
  565. return ";success|false";
  566. }
  567.  
  568. }
  569. return ";success|false";
  570. }
  571. public String enviaMusica(String song,String port){
  572. new Cliente(6000-Integer.parseInt(port),"/Users/joaomendes/Desktop/SDProjeto/ficheiros_server/"+song);
  573. return "true";
  574. }
  575.  
  576. private void escreveArtistas(ArrayList<Artista> artistas){
  577.  
  578. ObjectOutputStream oos ;
  579. FileOutputStream fout;
  580. try{
  581. fout = new FileOutputStream("artistas");
  582. oos = new ObjectOutputStream(fout);
  583. oos.writeObject(artistas);
  584. oos.close();
  585. fout.close();
  586.  
  587.  
  588. }catch (IOException e) {
  589. e.printStackTrace();
  590. }
  591. }
  592. private void escreveUtilizadores(ArrayList<Utilizador> users){
  593.  
  594. ObjectOutputStream oos ;
  595. FileOutputStream fout;
  596. try{
  597. fout = new FileOutputStream("utilizadores");
  598. oos = new ObjectOutputStream(fout);
  599. oos.writeObject(users);
  600. oos.close();
  601. fout.close();
  602.  
  603.  
  604. }catch (IOException e) {
  605. e.printStackTrace();
  606. }
  607. }
  608. public static ArrayList<Artista> leArtista() {
  609. ObjectInputStream ois ;
  610. FileInputStream fin;
  611. ArrayList<Artista> artistas;
  612.  
  613. try{
  614. fin = new FileInputStream("artistas");
  615. ois = new ObjectInputStream(fin);
  616. artistas=(ArrayList<Artista>) ois.readObject();
  617. ois.close();
  618. fin.close();
  619. return artistas;
  620.  
  621. }catch (IOException e) {
  622. e.printStackTrace();
  623. return null ;
  624.  
  625. }catch (ClassNotFoundException c ){
  626. c.printStackTrace();
  627. return null;
  628. }
  629.  
  630. }
  631. public static ArrayList<Utilizador> leUtilizadores() {
  632. ObjectInputStream ois ;
  633. FileInputStream fin;
  634. ArrayList<Utilizador> users;
  635.  
  636. try{
  637. fin = new FileInputStream("utilizadores");
  638. ois = new ObjectInputStream(fin);
  639. users=(ArrayList<Utilizador>) ois.readObject();
  640. ois.close();
  641. fin.close();
  642. return users;
  643.  
  644. }catch (IOException e) {
  645. e.printStackTrace();
  646. return null ;
  647.  
  648. }catch (ClassNotFoundException c ){
  649. c.printStackTrace();
  650. return null;
  651. }
  652.  
  653. }
  654. }
  655. class TCPServer extends Thread{
  656. private final static String fileOutput = "/Users/joaomendes/Desktop/SDProjeto/download/ficheiro.mp3";
  657. private final int id ;
  658. public TCPServer(int id){
  659. this.id=id;
  660. }
  661. public void run(){
  662. int numero=0;
  663. try{
  664. int serverPort = 6000+id;
  665. ServerSocket listenSocket = new ServerSocket(serverPort);
  666. System.out.println("LISTEN SOCKET="+listenSocket);
  667. File myFile = new File(fileOutput);
  668. while(true) {
  669. Socket clientSocket = listenSocket.accept(); // BLOQUEANTE
  670. System.out.println("CLIENT_SOCKET (created at accept())="+clientSocket);
  671. numero ++;
  672. new Connection(clientSocket, numero);
  673. }
  674. }catch(IOException e)
  675. {System.out.println("Listen:" + e.getMessage());}
  676. }
  677. }
  678. class TCPClient {
  679. private final static String serverIP = "127.0.0.1";
  680. private final static int serverPort = 5555;
  681. private final static String fileInput = "/Users/joaomendes/Desktop/Download/c/ficheiro.mp3";
  682.  
  683. public static void main(String args[]) throws IOException {
  684. Socket sock = new Socket(serverIP, serverPort);
  685. File f = new File(fileInput);
  686. byte[] mybytearray = new byte[(int) f.length()];
  687. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileInput));
  688. bis.read(mybytearray, 0, mybytearray.length);
  689. OutputStream os = sock.getOutputStream();
  690. int count;
  691. os.write(mybytearray, 0, mybytearray.length);
  692. os.flush();
  693. sock.close();
  694.  
  695. }
  696. }
  697. //= Thread para tratar de cada canal de comunicação com um cliente
  698. class Connection extends Thread {
  699. DataInputStream in;
  700. DataOutputStream out;
  701. Socket clientSocket;
  702. int thread_number;
  703.  
  704. public Connection (Socket aClientSocket, int numero) {
  705. thread_number = numero;
  706. try{
  707. clientSocket = aClientSocket;
  708. in = new DataInputStream(clientSocket.getInputStream());
  709. out = new DataOutputStream(clientSocket.getOutputStream());
  710. this.start();
  711. }catch(IOException e){System.out.println("Connection:" + e.getMessage());}
  712. }
  713. //=============================
  714. public void run(){
  715. String resposta;
  716. try{
  717. //byte[] mybytearray = new byte[(int) myFile.length()];
  718. byte[] mybytearray = new byte[8192];
  719. InputStream is = clientSocket.getInputStream();
  720. int bytesRead;
  721. int ite=0;
  722.  
  723. String nomeFicheiro = in.readUTF();
  724. System.out.println(nomeFicheiro);
  725.  
  726.  
  727. FileOutputStream fis = new FileOutputStream(nomeFicheiro);
  728. BufferedOutputStream bos = new BufferedOutputStream(fis);
  729.  
  730. while ( (bytesRead = is.read(mybytearray, 0, mybytearray.length)) !=-1){
  731.  
  732. System.out.println(bytesRead);
  733. bos.write(mybytearray, 0, bytesRead);
  734.  
  735. }
  736. bos.close();
  737.  
  738. clientSocket.close();
  739.  
  740. }catch(EOFException e){System.out.println("EOF:" + e);
  741. }catch(IOException e){System.out.println("IO:" + e);}
  742. }
  743. }
  744. class Cliente extends Thread{
  745. private String serverIP = "127.0.0.1";
  746. private int serverPort = 6001;
  747. private String fileInput="";
  748.  
  749. public Cliente(int id,String fileInput){
  750. this.fileInput=fileInput;
  751. this.serverPort=6000+id;
  752. this.start();
  753. }
  754. public void run() {
  755. Socket sock = null;
  756. try {
  757. sock = new Socket(serverIP, serverPort);
  758. File f = new File(fileInput);
  759. byte[] mybytearray = new byte[(int) f.length()];
  760. BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileInput+".mp3"));
  761. bis.read(mybytearray, 0, mybytearray.length);
  762. DataOutputStream out = new DataOutputStream(sock.getOutputStream());
  763. OutputStream os = sock.getOutputStream();
  764. int count;
  765. /*while ((count = bis.read(mybytearray)) > 0)
  766. {
  767. os.write(mybytearray, 0, count);
  768.  
  769. }*/
  770. String nome = "ficheiro2.mp3";
  771. byte[] b = nome.getBytes();
  772. out.writeUTF(nome);
  773. //os.write(b,0,b.length);
  774. os.write(mybytearray, 0, mybytearray.length);
  775. os.flush();
  776. sock.close();
  777.  
  778. } catch (IOException e) {
  779. System.out.println("Ficheiro Inexistente");
  780. }
  781.  
  782.  
  783. }
  784. }
  785.  
  786.  
  787. class Utilizador implements Serializable {
  788. String username;
  789. String password;
  790. int editor;
  791.  
  792. Utilizador(String username,String password){
  793. this.username=username;
  794. this.password=password;
  795. this.editor=0;
  796. }
  797. }
  798. class Artista implements Serializable{
  799. String des;
  800. String nome;
  801. ArrayList<Album> albuns;
  802. Artista(String nome,String des){
  803. this.des=des;
  804. this.nome=nome;
  805. this.albuns = new ArrayList<Album>();
  806. }
  807.  
  808. }
  809. class Album implements Serializable{
  810. String nome ;
  811. String descricao;
  812. String genero;
  813. ArrayList<String> editores;
  814. ArrayList<Critica> criticas;
  815. ArrayList<Musica> musicas;
  816.  
  817. Album(String nome,String descricao,String nomeEditor){
  818. this.editores = new ArrayList<String>();
  819. this.editores.add(nomeEditor);
  820. this.nome=nome;
  821. this.descricao=descricao;
  822. criticas = new ArrayList<Critica>();
  823. musicas = new ArrayList<Musica>();
  824.  
  825. }
  826. float mediaCriticas(){
  827. float soma=0;
  828. if (criticas.size()==0)
  829. return 0;
  830.  
  831. for(Critica crit : this.criticas){
  832. soma+=crit.pontuacao;
  833. }
  834. return soma/criticas.size();
  835. }
  836. }
  837. class Musica implements Serializable{
  838. String nome;
  839. float duracao;
  840.  
  841. public Musica(String nomeMusica, float v) {
  842. this.nome=nomeMusica;
  843. this.duracao=v;
  844. }
  845. }
  846. class Critica implements Serializable{
  847. String user;
  848. int pontuacao;
  849. String just;
  850.  
  851. Critica(String user,int pontuacao,String just){
  852. this.user=user;
  853. this.pontuacao=pontuacao;
  854. this.just=just;
  855. }
  856. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement