Guest User

Untitled

a guest
Jan 24th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. public class AnimUDPServerColor0{
  5. public static void main(String args[]){
  6. // 受信パケットの雛形を作成
  7. byte req[] = new byte[32];
  8. DatagramPacket receivePacket = new DatagramPacket(req,req.length);
  9.  
  10. try{
  11. // UDPソケット作成
  12. final int port = 8001;
  13. DatagramSocket socket = new DatagramSocket(port);
  14. System.out.println("Running...");
  15.  
  16. while(true){
  17. // クライアント待受
  18. socket.receive(receivePacket);
  19. String fname = new String(req,0,receivePacket.getLength());
  20.  
  21. // クライアントデータを取得して新しいパケットを作成
  22. byte buf[] = receivePacket.getData();
  23. InetAddress address = receivePacket.getAddress();
  24. int clientPort = receivePacket.getPort();
  25. DatagramPacket newPacket = new DatagramPacket(buf, buf.length, address, clientPort);
  26.  
  27. // 別スレッドでデータを送信する
  28. DataSendThread dataSendThread = new DataSendThread(newPacket, fname);
  29. Thread thread = new Thread(dataSendThread);
  30. thread.start();
  31. }
  32. }
  33. catch(Exception e){
  34. System.out.println("Exception : " + e );
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39.  
  40. // データ送信スレッド
  41. class DataSendThread extends Thread {
  42. // Ack用パケット
  43. DatagramPacket receivePacket;
  44. // ファイル名
  45. String fname;
  46.  
  47. DataSendThread(DatagramPacket receivePacket, String fname) {
  48. this.receivePacket = receivePacket;
  49. this.fname = fname;
  50. }
  51.  
  52. public void run() {
  53. try {
  54. //送信用DatagramPaket
  55. byte buf[] = new byte[1200];
  56. DatagramPacket sendPacket = new DatagramPacket(buf,buf.length);
  57.  
  58. // レスポンスに使うデータを取得
  59. InetAddress clientAddress = receivePacket.getAddress();
  60. int clientPort = receivePacket.getPort();
  61.  
  62. // 新しいUDP Socket
  63. DatagramSocket socket2 = new DatagramSocket();
  64.  
  65. // Ackを返す
  66. socket2.send(receivePacket);
  67.  
  68. // sendPacketのIPaddress,PortNo,データ長設定
  69. sendPacket.setAddress(clientAddress);
  70. sendPacket.setPort(clientPort);
  71. sendPacket.setLength(1200);
  72.  
  73. // 動画ファイルをストリームに変換
  74. System.out.println(fname);
  75. BufferedInputStream biStream = new BufferedInputStream(new FileInputStream(fname));
  76.  
  77. while(true) {
  78. for(int i = 0; i < 48; i++){
  79. // 送信データ読み出し
  80. biStream.read(buf,0,1200);
  81. // パケット送信
  82. socket2.send(sendPacket);
  83. // Ack返す
  84. socket2.receive(receivePacket);
  85. // ストリームが空なら終了
  86. if(buf[0] < 0)break;
  87. }
  88. if(buf[0] < 0)break;
  89. // Ackを返す
  90. socket2.receive(receivePacket);
  91. }
  92.  
  93. biStream.close();
  94. socket2.close();
  95. } catch (Exception e) {
  96. System.out.println("Exception : " + e );
  97. e.printStackTrace();
  98. }
  99. }
  100. }
Add Comment
Please, Sign In to add comment