Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.net.*;
- public class AnimUDPServerColor0{
- public static void main(String args[]){
- // 受信パケットの雛形を作成
- byte req[] = new byte[32];
- DatagramPacket receivePacket = new DatagramPacket(req,req.length);
- try{
- // UDPソケット作成
- final int port = 8001;
- DatagramSocket socket = new DatagramSocket(port);
- System.out.println("Running...");
- while(true){
- // クライアント待受
- socket.receive(receivePacket);
- String fname = new String(req,0,receivePacket.getLength());
- // クライアントデータを取得して新しいパケットを作成
- byte buf[] = receivePacket.getData();
- InetAddress address = receivePacket.getAddress();
- int clientPort = receivePacket.getPort();
- DatagramPacket newPacket = new DatagramPacket(buf, buf.length, address, clientPort);
- // 別スレッドでデータを送信する
- DataSendThread dataSendThread = new DataSendThread(newPacket, fname);
- Thread thread = new Thread(dataSendThread);
- thread.start();
- }
- }
- catch(Exception e){
- System.out.println("Exception : " + e );
- e.printStackTrace();
- }
- }
- }
- // データ送信スレッド
- class DataSendThread extends Thread {
- // Ack用パケット
- DatagramPacket receivePacket;
- // ファイル名
- String fname;
- DataSendThread(DatagramPacket receivePacket, String fname) {
- this.receivePacket = receivePacket;
- this.fname = fname;
- }
- public void run() {
- try {
- //送信用DatagramPaket
- byte buf[] = new byte[1200];
- DatagramPacket sendPacket = new DatagramPacket(buf,buf.length);
- // レスポンスに使うデータを取得
- InetAddress clientAddress = receivePacket.getAddress();
- int clientPort = receivePacket.getPort();
- // 新しいUDP Socket
- DatagramSocket socket2 = new DatagramSocket();
- // Ackを返す
- socket2.send(receivePacket);
- // sendPacketのIPaddress,PortNo,データ長設定
- sendPacket.setAddress(clientAddress);
- sendPacket.setPort(clientPort);
- sendPacket.setLength(1200);
- // 動画ファイルをストリームに変換
- System.out.println(fname);
- BufferedInputStream biStream = new BufferedInputStream(new FileInputStream(fname));
- while(true) {
- for(int i = 0; i < 48; i++){
- // 送信データ読み出し
- biStream.read(buf,0,1200);
- // パケット送信
- socket2.send(sendPacket);
- // Ack返す
- socket2.receive(receivePacket);
- // ストリームが空なら終了
- if(buf[0] < 0)break;
- }
- if(buf[0] < 0)break;
- // Ackを返す
- socket2.receive(receivePacket);
- }
- biStream.close();
- socket2.close();
- } catch (Exception e) {
- System.out.println("Exception : " + e );
- e.printStackTrace();
- }
- }
- }
Add Comment
Please, Sign In to add comment