⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rstpdownthread.java

📁 音乐网站下载程序
💻 JAVA
字号:
package org.tools.net.protocol.rstp;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class RSTPDownThread {

	/**
	 * @param args
	 * @throws InterruptedException 
	 * @throws  
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException, InterruptedException {
		// TODO 自动生成方法存根
		String CRLF="\r\n",mes;
		
		Socket s = new Socket(InetAddress.getByName("58.211.7.218"),554);
		PrintWriter out = new PrintWriter(s.getOutputStream());
		BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
		
		//第一次发数据
		out.print("OPTIONS rtsp://58.211.7.218:554 RTSP/1.0"+CRLF);
		out.print("CSeq: 1"+CRLF);
		out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"+CRLF);
		out.print("ClientChallenge: 9e26d33f2984236010ef6253fb1887f7"+CRLF);
		out.print("PlayerStarttime: [28/03/2003:22:50:23 00:00]"+CRLF);
		out.print("CompanyID: KnKV4M4I/B2FjJ1TToLycw=="+CRLF);
		out.print("GUID: 00000000-0000-0000-0000-000000000000"+CRLF);
		out.print("RegionData: 0"+CRLF);
		out.print("ClientID: Linux_2.4_6.0.9.1235_play32_RN01_EN_586"+CRLF);
		out.print("Pragma: initiate-session"+CRLF);		
		out.print(CRLF);
		out.print(CRLF);
		out.flush();
		mes = read(bis);
		
		String realChallenge1=getValue(mes,"RealChallenge1: ");
	
		String session = getValue(mes,"Session:");
		//第二次发送数据
		out.print("DESCRIBE rtsp://58.211.7.218/%B0%A2%B9%FADJ%D5%BEgddj.com/wglcd/XC/A-505.ra RTSP/1.0"+CRLF);
		out.print("CSeq: 2"+CRLF);
		out.print("Accept: application/sdp"+CRLF);
		out.print("Session:"+session+CRLF);
		out.print("Bandwidth: 10485800"+CRLF);
		out.print("SupportsMaximumASMBandwidth: 1"+CRLF);
		out.print("GUID: 00000000-0000-0000-0000-000000000000"+CRLF);
		out.print("Require: com.real.retain-entity-for-setup"+CRLF);
		out.print(CRLF);
		out.print(CRLF);
		out.flush();
		mes = read(bis);

		String realChallenge2 = RealChallenge.calcChallenge(realChallenge1);
		String realCheckSum = RealChallenge.calcCheckSum(realChallenge2);
		//第三次发送数据
		out.print("SETUP rtsp://58.211.7.218/%B0%A2%B9%FADJ%D5%BEgddj.com/wglcd/XC/A-505.ra/streamid=0 RTSP/1.0"+CRLF);
		out.print("CSeq: 3"+CRLF);
		out.print("RealChallenge2: "+realChallenge2+", sd="+realCheckSum+CRLF);
		out.print("Transport: x-pn-tng/tcp; mode=play"+CRLF);
		out.print("If-Match:"+session+CRLF);
		out.print(CRLF);
		out.print(CRLF);
		
		//第四次发送数据
		out.print("SET_PARAMETER rtsp://58.211.7.218/%b0%a2%b9%faDJ%d5%begddj.com/wglcd/YW/D-614.ra RTSP/1.0"+CRLF);
		out.print("CSeq: 4"+CRLF);
		out.print("Subscribe: stream=0;rule=0,stream=0;rule=1"+CRLF);
		out.print("Session:"+session+CRLF);
		out.print(CRLF);
		out.print(CRLF);
		out.flush();
		mes = read(bis);
		
	    
		//第五次发送数据
		out.print("PLAY rtsp://58.211.7.218:554/%b0%a2%b9%faDJ%d5%begddj.com/wglcd/YW/D-614.ra RTSP/1.0"+CRLF);
		out.print("CSeq: 5"+CRLF);
		out.print("Session:"+session+CRLF);
		out.print("Range: npt=0.000-"+CRLF);
		out.print(CRLF);
		out.print(CRLF);
		out.flush();
		
		File f = new File("D:/temp.ra");
		FileOutputStream fos = new FileOutputStream(f);
		//读取数据
		byte[] b = new byte[1024];
		int r=0,cr=0;
		boolean first = true;
		
		while((r=bis.read(b))>0){
			//流完结束
			if(first){
				String temp = new String(b,0,r,"ISO_8859_1");
				int index = temp.lastIndexOf("CSeq: 5");
				//if(index==-1)continue;
				first = false;
				index = temp.indexOf(CRLF+CRLF,index);
				//fos.write(b, index+4, r-index-4);
				fos.write(b, 0, r);
				cr = r-index-4;
				
			}else{
				fos.write(b, 0, r);
				cr=r;
			}
			System.out.println("读取"+cr+"bits");
		}
	    s.close();
		fos.close();
		System.out.println("文件下载完成");
	}
	
	private static String read(BufferedInputStream bis) throws IOException{
		byte[] b = new byte[1024];
	    int r = bis.read(b);
	    String mes = new String(b,0,r);
	    return mes;
	}
	
	private static String getValue(String mes,String key){
		int index = mes.indexOf(key);
		if(index<0)return null;
		return (mes.substring(index+key.length(),mes.indexOf("\r\n",index)));
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -