Windows Media Player文件


这里的空气很新鲜
这里的小吃很特别
这里的lette不像水
这里的夜景很有感觉

在一万英尺的天边
在有港口view的房间
在讨价还价的商店
在凌晨喧闹的三四点
可是亲爱的你怎么不在我身边
我们有多少时间能浪费
电话再甜美
传真再安慰
也不足以应付不能拥抱你的遥远
我的亲爱的你怎么不在我身边
一个人过一天像过一年
海的那一边
乌云一整片
我很想为了你快乐一点
可是亲爱的
你怎么不在身边
-----

一、引言

  Java是一门适合于分布式计算环境、尤其是Internet程序设计的语言。这不仅仅在于java具有很好的安全性和可移植性,还在于java为Internet编程提供了丰富的网络类库的支持。利用这些网络类库,可以轻松编写多种类型的网络通信程序。然而由于某些限制,Java在传输多媒体信息方面的应用不是很广,大部分的应用都集中在网络上传输语音
等音频信号的方面。传输音频信号应用方案一般有两种,一是应用于数据广播的多对一传输,例如音频数据服务器向数个客户端发送音频数据信号,其最广泛的应用则是某些网上的IP电话,大家经常可以看到不少这种提供在线IP电话服务的网站的客户端都是使用的嵌在网页上的Java Applet程序,用来实现拨号、通话等等基本的网络电话功能; 第二种方案则是我们今天要涉及的部分,一对一的音频信号数据的传输。这种方案的应用范围更广。大家都去过语音聊天室,大部分的语音聊天室的语音聊天功能的实现就是使用的Java技术,大家对这样网页的源代码分析一下就可以发现这一点。

  我曾开发一个项目,涉及使用java来实现在网络上传输语音数据。开发中遇到不少问题,而且在互联网上发现关于java语音传输的资料比较少,寻找了许多天,最终从一个开放源代码的一个简单的Answer Machine 演示程序中获得了解决问题的方法。今天我就把我在点对点传输音频信号方面的一些经验拿出来,与大家共同探讨这方面的问题。

  二、存在的问题

  在网络上传输音频的方面存在的问题主要可以归纳为以下几点:

  1 双方之间的网络连接

  要进行频数据的传输,首先就是要建立数据连结。常用的通讯协议中,TCP较可靠,所以用在不允许数据丢失的应用上。而UDP则较多应用于处理速度要求较快、数据传输可靠性要求不是很高的应用上,如数据广播。通信协议的选择取决于我们所要做的应用的类型。怎样建立网络连接,稳定的接收和发送音频信号的数据流是关键。

  2 音频信号的采集以及回放

  在进行音频信号的采集中我们必须考虑到采样率的问题,声音信号的采样率有8Khz、16Khz、32Khz、44Khz等,每种数据采样虑产生的数据量都不一样,越高的采样率产生的数据量越大,所以我们要选择合适的采样率以适应网络的带宽。

  3 音频数字信号的编码与解码。

  如果把直接采集到的音频信号数据流在网络上进行传输,它所占有的带宽也是十分大的,以8Khz的采样率采集14位的音频数据那么就有以下这样的一个式子:

14 bit * 8000/second=112,000 bits/second or112kbps

  从中我们可以看出以这样的方式传输音频数据,每秒需要向网络中发送112kb的数据。所以。从节省带宽的角度考虑,我们很有必要对这样的数据进行压缩。对多媒体信号的压缩我们有许多可以选择的格式,如mp2、mp3、GSM等等。同样,我们这里也存在一个对压缩格式进行选择的问题,考虑到音频数据传输的及时性,对传输的音频数据质量的要求,以及各种压缩格式的压缩比率以及进行压缩和解压缩所要耗费的系统资源等方面问题,选择合适的压缩格式就显得尤为重要。

三、解决的方法

  下面就针对前面提出的问题讨论一下解决的办法。

  1 双方之间的网络连接

  Java在这方面有其独特的优势,Java提供了丰富的网络类库的支持,可以轻松编写多种类型的网络通信程序。在我下面的例子中我就使用了TCP/IP协议,通过Java的Socket类进行编程。

  2 音频信号
的采集和回放以及音频数字信号的编码与解码

  在解决这两个问题的时候,在网上很幸运地通过一些文章的介绍,找到了Answer Machine 演示程序的源代码(由of jsresources.org的Florian Bomers 和Matthias Pfisterer编写,网址http://www.jsresources.org/apps/am.html)。在这个程序代码中,有几个解决我们问题所需要的类,而且作者将这些类封装的很好,我们基本不需要做什么改动,只需要屏蔽其中的调试信息的输出就行了,更可贵的是它还封装了几种常见的音频格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我们下面例子中采用的压缩格式,GSM格式可以将128kbps 的音频数据流 (16bit通过8k Hz的音频采样) 压缩为13kbps 的音频数据流,非常适合语音信号的传送,所以可谓是一石二鸟。

  我分析过这几个类的源代码,不得不佩服它的作者,每个类的源代码都很精炼,大家可以自己分析一下。好了下面就给大家讲讲这几个类,并且将它们用到的Java Sound API中的类和函数等一并做个简单介绍,让大家对Java Sound API中常用的类也有个大致的了解。由于Java Sound API中的类比较多。限于篇幅无法对所有用到的类做详尽的解释,以下内容只是简单提及了各个类的用途和使用规范,有关Java Sound API中类的具体介绍请大家访问这里http://java.sun.com/j2se/1.4.2/docs/api/, 查找javax.sound.sampled的相关内容。

  以下的提到几个文件是从Answer Machine 演示程序的源代码中提取出来的,由于是开放源代码的程序,大家在使用的时候请注意相关的公共协议。

  ① AMAudioFormat类(封装在AMAudioFormat.java文件中)

  AMAudioFormat类封装了CD、FM、TELEPHONE、GSM这四种质量的音频格式的参数,使用起来也非常简单,这样我们在使用Java Sound API时就不用自己去写那些复杂的代码了,但为了明白Java Sound API的原理,我们需要对它的代码做一下分析。它使用了Java Sound API中的AudioFormat这个类,这个类非常重要,在Java中对任何音频数据的使用都要实现通过它指定所需要使用的音频格式,AudioFormat类有一个嵌套的类AudioFormat.Encoding,实际上大部分对AudioFormat类的使用都是使用的这个嵌套的类。

  AMAudioFormat类的重要方法:

  名称:getLineAudioFormat
  调用格式:getLineAudioFormat(整型音频格式代号)
  返回值: 根据传递音频格式代号生成的AudioFormat对象。

  说道这里大家可能要问了,那么通过Java Sound API可以直接使用GSM格式吗?答案是比较复杂,但同样有解决的办法,作者在这里使用了另外的开源程序的类库-tritonus的GSM编码解码库。大家需要在这里www.tritonus.org/plugins.html下载tritonous_share.jar和tritonus_gsm.jar两个文件,并在AMAudioFormat类中引用,这样就完成了GSM格式的设置。需要告诉大家的是在对AMAudioFormat.java这个类进行编译后,我们的程序运行的时候就可以不需要tritonous_share.jar和tritonus_gsm.jar这两个文件的支持了。

  ② AudioCapture类(封装在AudioCapture.java文件中)

  AudioCapture类封装了从音频硬件捕获音频数据并自动编码为GSM音频压缩数据的过程,并且通过它的getAudioInputStream()方法提供给我们一个音频数据输入流,我们就可以直接将这个流发送到网络中。

  AudioCapture 类的重要方法:
  名称:getAudioInputStream
  调用格式:getAudioInputStream()
  返回值:AudioInputStream对象

  AudioCapture 类使用了Java Sound API中的AudioInputStream、AudioFormat、AudioSystem这几个类和TargetDataLine、LineListener接口。除了AudioFormat类我再简单介绍一下其他的类:

  AudioInputStream 类是带有特殊音频格式和长度的InputStream类,它有两个构造方法,分别是AudioInputStream(InputStream stream, AudioFormat format,long length)和AudioInputStream(TargetData -Line line)。

  TargetDataLine 接口是DataLine接口的一种,通过它就可以直接从音频硬件获取数据了,它有几个常用的方法,分别是:open(AudioFormat format)、void open(AudioFormat format, int bufferSize)、int read(byte[] b, int off, int len)。

  AudioSystem 类是Java标准音频系统的入口点,在AudioSystem 类中使用他的getLine() 方法创建TargetDataLine对象。

  LineListener接口用来对线路状态改变的时间进行监听,他的重要的方法是update(LineEvent event)方法。

  ③ AudioPlayStream类(封装在AudioPlayStream.java文件中)

  AudioPlayStream类与AudioCapture类刚好相反,它封装了GSM压缩音频数据的解码和音频信号的回放过程,提供给我们一个音频信号输出流。AudioCapture类用到的Java Sound API中的类它也基本都用到了,只是它使用了SourceDataLine接口而不是TargetDataLine接口

  ④ Debug类(封装在Debug.java文件中)

  Debug类主要用来在调试时输出讯息,代码很少,后来我把其中输出信息的语句都屏蔽了,对程序运行没有影响。

  为了方便使用以上的几个类,我们需要对它们进行编译和打包,编译时需要设置相关的编译环境,以下是我们需要用到的命令行

set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar
javac am\*.java am\audio\*.java
jar cmf packaging\manifest.mf am.jar am\*.class
am\audio\*.class

  说明一下,我将以上提到的Java源码文件放在了am目录下,编译之后可以得到一个8k的am.jar文件,我们下一步所需要做的就是在我们的程序中引用这个包。

四、实例介绍

  有了以上的基本的介绍,我就可以通过对我写的一个极为简单的语音对讲软件代码的解释让大家更清楚地了解一下这几个模块的具体使用方法,大家可以从中获得开发具有诸如网络电话、自动应答等功能的软件的类似方法,用于语音数据的传输。

  程序的结构:


  整个程序分三层,作用分别如下:

  . 顶层: 用户界面

  . 中间层: 控制层

  . 底层: 传输层

  程序有两个主要的类: (表)

类名 描述
CallLink 网络传输层,用于接收或发送音频数据。
VoiceSender 作为第二个启动的线程提供从音频硬件捕获并编码好的数据给网络传输层。



  程序的主类jphone使用了Runnable和ActionListener接口,主类除了基本的几个方法之外,还具有方法initAudioHardware()、ShowMSG、startPhone分别用于初始化AudioCapture类与AudioPlayStream类、显示程序状态和开始程序。主类jphone具有两个子类VoiceSender和CallLink。

  子类VoiceSender同样使用了Runnable接口,它在程序中作为第二个启动的线程负责发送捕获到的音频数据。CallLink子类就是负责建立scoket连接,并且负责接收或发送网络数据、监听网络连接等功能的实现。它具有主要的方法是getInputStream()、getOutputStream()、listen()、open()、close()等。

  为了让大家更清楚的了解程序的结构请大家看下面的类图。
点击在新窗口中浏览此图片
程序的基本工作流程:

  当程序启动时首先执行建立当前主类的实例,当按下呼叫按钮的时候执行startPhone()方法,startPhone()方法通过调用initAudioHardware()方法建立AudioCapture对象和AudioPlayStream对象的实例PhoneMIC和PhoneSPK, 紧接着在建立CallLink子类的实例curCallLink来与具有目标IP地址的计算机进行scoket连接后,startPhone()方法又将子类VoiceSender作为secondThread线程启动,然后又调用run()方法。 run()方法通过已经建立的CallLink子类的实例curCallLink监听网络上的数据(也就是等待别人的呼叫),一旦有音频数据到来curCallLink 实例就为AudioPlayStream 对象PhoneSPK 提供网络传来的音频数据,而PhoneSPK在一个循环中不断的将音频数据转换为音频信号,完成类似电话听筒的功能。

  子类VoiceSender 就作为第二线程启动的时候,startPhone() 方法传递给它的参数是实例化的CallLink 子类curCallLink , 子类VoiceSender 通过实例化的AudioCapture 对象PhoneMIC 将音频信号压缩成GSM数据,并通过curCallLink 将音频数据发送到具有目标IP 地址的计算机上,完成类似电话受话器的功能。

  在这里实例化的CallLink 子类curCallLink 就相当于两个电话之间的电话线,这样通过我以上的解释大家对程序的原理就有一个大概的了解了吧。

  其中的音频数据发送线程和音频数据接收线程是同步的,不过考虑到网络的因素,可能在声音的传输上有一些延迟,不过由于延迟比较小对及时听到对方的话语影响不大。
点击在新窗口中浏览此图片
编写代码摘要:

  在使用AudioCapture 类和AudioPlayStream 类的方法之前需要知道怎样初始化这两个类。在声明AudioCapture 对象的时候需要传递给它一个静态的整型值用于表达将音频信号压缩的方式,这个静态的整型常量可以是AMAudioFormat 类的以下四个值之一: FORMAT_CODE_CD 、FORMAT_CODE_FM 、FORMAT
_CODE_TELEPHONE 、FORMAT_CODE_GSM 。所以声明AudioCapture 对象就要用一下的形式:


private AudioCapture PhoneMIC null;
PhoneMIC new AudioCapture(AMAudioFormat.
FORMAT_CODE_GSM);  


  而声明AudioPlayStream 对象则不同,我们在初始化它的时候需要传递给它一个AudioFormat 对象,用于通知它我们所要播放音频的格式,这个AudioFormat 对象可以通过AMAudioFormat 类的getLineAudioFormat(格式参数值)方法获得,其中格式参数的取值和上面提到过的AMAudioFormat 的四个值相同,所以声明AudioPlayStream 对象就要用以下的形式:


private AudioPlayStream PhoneSPK null;
AudioFormat format null;
format AMAudioFormat.getLineAudioFormat
(AMAudioFormat.FORMAT_CODE_GSM);
PhoneSPK new AudioPlayStream(format);  


  在这之后就可以使用AudioCapture 和AudioPlayStream 对象的open() 方法打开音频捕获和音频回放通道完成它们的初始化了。如以下的形式:


PhoneMIC.open();
PhoneSPK.open();  


  初始化完成之后要使AudioPlayStream 对象播放声音还需要以下过程,首先建立一个缓冲区(字节数组)用于存放从网络传来的音频数据流,然后执行AudioPlayStream 对象的start() 方法使AudioPlayStream
对象开始声音的回放,这时执行一个while 循环,在循环中将音频流数据写入缓冲区,再使用AudioPlayStream对象的write()方法将缓冲区的数据还原成语音信号然后播放出来。如下面的例子:


boolean complete false;
byte[] gsmdata new byte[bufSize];
int numBytesRead 0;
......
PhoneSPK.start();
......
complete false;
while((!Thread.currentThread().interrupted()) )
{
 try
 {
  numBytesReadplaybackInputStream.read(gsmdata);
  if(numBytesRead == -1)
  {
   complete=true;
   break;
  }
  PhoneSPK.write(gsmdata, 0, numBytesRead);
 }
 catch (IOException e)
 {
  System.exit(1);
 }
}  


  其中complete 的值用于标志终止声音播放的异常原因。

  类似的,初始化完成之后要使AudioCapture 对象捕获和压缩声音数据还需要其他的操作,首先声明一个InputStream 对象,赋其值为AudioCapture 对象的getAudioInputStream() 方法的返回值,执行
AudioCapture 对象的start() 方法,然后在建立一个循环,将通过InputStream 的read() 方法得到的数据发送到网络上。例如以下代码:


InputStream myIStream null;
myIStream PhoneMIC.getAudioInputStream();
......
while((!Thread.currentThread().interrupted()))
b = myIStream.read(compressedVoice,0, bufSize);
sendStream.write(compressedVoice,0,b);
......



  通过使用CallLink 的几个方法,我们可以方便的传输和接收音频数据流。以下是它的代码:


class CallLink
//使用套接字进行连接
String ipAddr null;
Socket outSock = null;
ServerSocket inServSock null;
Socket inSock null;
CallLink(String inIP)
ipAddr inIP;
void open() throws IOException, UnknownHostException
{//打开网路连接
if (ipAddr != null)
outSock=new Socket(ipAddr,TALK_PORT);
}

void listen() throws IOException
{// 监听,等候呼叫
inServSock new ServerSocket(TALK_PORT);
inSock inServSock.accept();
}

public InputStream getInputStream()throws IOException
{//返回音频数据输入流
if (inSock != null)
return inSock.getInputStream();
else
return null;
}
publicOutputStreamgetOutputStream()throwsIOException
{//返回音频数据输出流
if (outSock != null)
return outSock.getOutputStream();
else
return null;
}

void close() throws IOException
{//关闭网络连接
inSock.close();
outSock.close();
}



  程序的代码总体有366 行,限于篇幅,这里就不一一列举了。

  编译以及程序的使用方法:

  运行和编译本程序需要加上额外的环境参数,为了方便使用可以建立以下内容的批处理文件:(假设程序所需要的包均在程序所在目录下的lib 文件夹中)

  用于编译的批处理程序c.bat 的内容

javac -classpath .;lib\am.jar jphone.java

  用于运行的批处理程序r.bat 的内容

java -classpath .;lib\am.jar jphone

  启动时在A 计算机的IP 地址框内输入要进行连接的计算机B 的IP 地址,在计算机B 的IP 地址框内输入要进行连接的计算机A 的IP 地址,让后分别点击“拨出电话”按钮就可以进行连接了。当然别忘了接上麦克风和打开音箱电源,呵呵。

  提醒大家,这里的IP 地址栏里预先存在的地址是127.0.0.1,也就是说,程序也可以和自己进行连接,点击“拨出电话”按钮,等8 秒左右敲敲你的麦克风,听到没有,是不是也有“嘣、嘣、嘣”的声音?

这是我原来用过的两段代码,输出音频和捕获音频。
构造器里的socket是用来接受来自网络的音频数据。不做网络音频可以去掉它。

希望能与大家分享经验。8-)

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;


/**
* title: voicechat
* description: 输出音频(放音程序)
* copyright: copyright (c) 2001
* company:
* @author  你猜!
* @version 1.0
*/


class playback implements runnable {

final int bufsize = 16384;
sourcedataline line;
thread thread;
socket s;

playback(socket s){//构造器 取得socket以获得网络输入流
this.s=s;
}
public void start() {

thread = new thread(this);
thread.setname("playback");
thread.start();
}

public void stop() {
thread = null;
}

public void run() {

audioformat format =new audioformat(8000,16,2,true,true);//audioformat(float samplerate, int samplesizeinbits, int channels, boolean signed, boolean bigendian)
bufferedinputstream playbackinputstream;

try {
playbackinputstream=new bufferedinputstream(new audioinputstream(s.getinputstream(),format,2147483647));//封装成音频输出流,如果网络流是经过压缩的需在此加套解压流
}
catch (ioexception ex) {
return;
}

dataline.info info = new dataline.info(sourcedataline.class,format);

try {
line = (sourcedataline) audiosystem.getline(info);
line.open(format, bufsize);
} catch (lineunavailableexception ex) {
return;
}

byte[] data = new byte[1024];//此处数组的大小跟实时性关系不大,可根据情况进行调整
int numbytesread = 0;
line.start();

while (thread != null) {
try{
numbytesread = playbackinputstream.read(data);
line.write(data, 0,numbytesread);
} catch (ioexception e) {
break;
}
}

if (thread != null) {
line.drain();
}

line.stop();
line.close();
line = null;
}
}


import java.io.*;
import javax.sound.sampled.*;
import java.net.*;

/**
* title: voicechat
* description: 音频捕捉(录音程序)
* copyright: copyright (c) 2001
* company:
* @author  你猜!
* @version 1.0
*/

class capture implements runnable {

targetdataline line;
thread thread;
socket s;
bufferedoutputstream captrueoutputstream;

capture(socket s){//构造器 取得socket以获得网络输出流
this.s=s;
}

public void start() {

thread = new thread(this);
thread.setname("capture");
thread.start();
}

public void stop() {
thread = null;
}

public void run() {

try {
captrueoutputstream=new bufferedoutputstream(s.getoutputstream());//建立输出流 此处可以加套压缩流用来压缩数据
}
catch (ioexception ex) {
return;
}

audioformat format =new audioformat(8000,16,2,true,true);//audioformat(float samplerate, int samplesizeinbits, int channels, boolean signed, boolean bigendian)
dataline.info info = new dataline.info(targetdataline.class,format);

try {
line = (targetdataline) audiosystem.getline(info);
line.open(format, line.getbuffersize());
} catch (exception ex) {
return;
}

byte[] data = new byte[1024];//此处的1024可以情况进行调整,应跟下面的1024应保持一致
int numbytesread=0;
line.start();

while (thread != null) {
numbytesread = line.read(data, 0,1024);//取数据(1024)的大小直接关系到传输的速度,一般越小越快,
try {
captrueoutputstream.write(data, 0, numbytesread);//写入网络流
}
catch (exception ex) {
break;
}
}

line.stop();
line.close();
line = null;

try {
captrueoutputstream.flush();
captrueoutputstream.close();
} catch (ioexception ex) {
ex.printstacktrace();
}
}
}

我个人是认为这个体罚比较让人接受,其实竞争本来就是残酷的,虽然没有长征那末紧迫和具有一定的让人生死存亡的感觉,于是有些聪明的人就提出了友谊之说,可见高明之处,于是我们有了友谊,但是,我们真的有么?没有.只是人们的一种碍于颜面罢了,自欺欺人的好下台阶,但是世界是要向前发掌的动力不能没有,让人们大胆尝试,但是不能太过分,否则就像动物一样,变得没有人情可讲,呵呵......我道出了真话,可能有人会不同意我的观点,我只想说无论追求什么,我们都要用我们的精力&时间去学习他人的精力方式等.否则跟死亡没有两样,........
Windows Media Player文件

曲名:冷雨夜     歌手:Beyond

在雨中漫步
蓝色街灯渐露
相对望
无声紧拥抱着
为了找往日
寻温馨的往日
消失了
任雨湿我面
难分水点泪痕
心更乱
愁丝绕千百段
骤变的态度
无心伤她说话
收不了
冷雨夜我在你身边
盼望你会知
可知道我的心
比当初已改变
只牵强地相处
冷雨夜我不想归家
怕望你背影
只苦笑望雨点
须知要说清楚
可惜我没胆试
尝水中的味道
仿似是
情此刻的尽时
未了解结合
留低思忆片段
不经意

 我的亲爱的,你怎么不在我身边,一个人过一天,象过一年,可是亲爱的,你怎么不在身边,我有多少时间能浪费,................
http://www.blueidea.com/tech/multimedia/2003/741.asp


首先我们要拿到安装包。本人是从adobe官网下载的最新版本 3.5 的。
不过 在官网下载需要注册帐号。如果嫌麻烦的朋友可以在我的FTP上下载。

拿到FlashMediaServer3.5.tar.gz之后(这是linux安装包的)。
上传到自己的服务器上。进行解压:

先创建个用户和用户组给fms用,

[root@localhost ~]# groupadd fms
[root@localhost ~]# useradd -g fms fms

tar zxvf FlashMediaServer3.tar.gz 解压完毕,进入安装目录:
cd FMS_3_5_1_r516 进入安装目录之后执行安装:
./installFMS -platformWarnOnly 注意:-platformWarnOnly 这个参数必须加上。忽略操作系统平台。否则可能以内操作系统的不兼容而无法安装。
敲回车阅读安装协议,Ctrl+C直接跳过。输入 y 敲回车开始安装!
我x,要注册码。。。好的找注册机。(可以到我的FTP上下载)注册机上注意选择安装类型是 Adobe Flash Media Interactive Server v 3.5.x 这个功能更强大.通俗点类似于企业版的2003.
这里贴个注册码: 1373-5047-2985-0514-5175-0098
贴入敲回车正式开始安装:
屏幕提示:Default [/opt/adobe/fms]:
输入 /opt/adobe/fms 敲回车! (软件安装路径.用默认的即可.) 我第一次安装傻乎乎的输入了y 我以为是问我是否安装到默认目录. 这里注意下 default后边的是默认输入的提示!
屏幕提示:Default [1935,80]: FMS服务器监听端口:因为装了apache 已经用到了80端口.所以这里我们只监听1935即可.80去掉.否则和apache冲突apache就启动不起来了.
输入 1935 敲回车! 屏幕提示:Default [1111]: 默认远程管理的端口 默认即可. 输入 1111 敲回车!
屏幕提示:Please enter the administrative username: 设置管理员帐号: 输入 你的习惯帐号 回车,密码回车
屏幕提示:Default user [nobody]: 意思是FMS服务用那个用户来运行的.默认即可,如果你是linux高手,并有不良嗜好,那安装之前自己创建一个用户帐号来运行fms.反正我一台服务器用的 root.用户组也是root 因为用其他账户出现了不少权限问题 造成了不少麻烦.你根据个人需要吧! 另外一台机器用默认的nobody 安装.好像也比较正常,很奇怪的事情.
下一步 屏幕提示:Do you want to install apache? (y/n) Default [y]: 问你要不要特殊服务:安装apache.废话,当然不要,我按过了.
输入 n 敲回车! 屏幕提示:Do you want the Adobe Flash Media Server service to run as a daemon? (y/n) Default [y]: 要不要守护进程什么的. 只管 y 输入 y 回车
屏幕提示:Do you want to start the Adobe Flash Media Server after the installation is done? (y/n) Default [y]: 装完顺便启动? 当然 y 回车!
然后会列出配置文件信息,自己检查一下没问题就 安装了,安装完毕 fms会自己启动.

如果没

cd /opt/adobe/fms

and enter

./fmsmgr server fms start
用top命令看一下有下边四个进程吗?有的话ok了!(top -b -d 5)
fmsmaster fmsedge fmscore fmsadmin
别忘记打开linux的防火墙端口!!!!


fms_adminConsole.swf 位于tools目录下


=================================================================

Linux 下安装Flash Media Server(翻译自FLash Media Server帮助手册)
在LINUX操作系统上安装Flash Media Server:
1.以ROOT身份登陆(安装Flash Media Server所必需的)。
2.本地安装文件,FlashMediaServer2.tar.gz.
   安装文件在你的CD上,或者你可以下载得到。
3.复制安装文件到你的本地硬盘上的目录中。
4.打开一个SHELL窗口切换到安装目录中。(例如 [root@localhost root]# cd /Flash Media Server 笔者添加)
5.Unzip安装文件:
  gunzip flashmediaserver2.tar.gz
6.Untar 安装文件:
  tar -xf flashmediaserver.tar
创建了一个带有安装文件的目录
7.切换到安装目录下:
  cd flashmediaserver2
8.使用下面的命令启动安装文件:
./installFMS
安装程序开始并出现欢迎信息
9.按回车键开始安装。
10.下列安装提示在你的屏幕上。
    Enter a user for Flash Media Server processes to run as. The default is the "nobody" user. (The user you select is also the owner of the ?Flash Media Server files.) Your choices are written to the fms.ini file; you can edit the fms.ini file to modify this and other security properties later, if needed.
11.浏览你所选择的安装选项
   安装完成以后,如果你设置Flash Media Server为自动启动模式,Flash Media Server 自动开启。
12.手动开启Flash Media Server
   fmsmgr server start
13.以管理员身份管理服务,打开管理操作通过fms2_console.swf文件。
提示:一些杀毒程序,例如熊猫杀毒软件,这样的软件会在系统物理层上面将SOCKET CALL封状,很可能导致Flash Media Server失败。(另外一些杀毒软件,例如NOTON诺顿,是兼容Flash Media Server。)如果你正在使用Flash Media Server同杀毒软件一起安装,尝试卸载杀毒程序。

=======================================

FMS2是Macromedia公司的一项多媒体应用平台,全称是Flash Media Server 2,他是FCS的升级版,就比如说是FLASH7跟FLASH8的关系。只是版本不一样升级了而已。

FMS2只有英文版,Adobe还没有发布中文版,等吧!

FlashMediaServer2 (FMS2) 服务器程序在这里可以下载,附带无限制授权文件:  

Win32版:  http://www.loonlog.cn/soft/fms/FlashMediaServer2.rar
Linux 版: http://www.loonlog.cn/soft/fms/FlashMediaServer2.tar.gz
授权文件: http://www.loonlog.cn/soft/fms/license.zip   (Windows与Linux都通用)

安装把license.lic文件拷到license目录里,Linux与WINDOWS版的一样用法。


FMS2的详细安装过程序如下:


Flash Media Server的系统需求

下面的软件和硬件是运行Flash Media Server 2的最小需求:
支 持的操作系统: Windows 2000 Server Windows 2003 Server, Standard Edition Linux Red Hat Enterprise, Version 3.0 Linux Red Hat Enterprise, Version 4.0
硬件需求: x86兼容CPU(Pentium III,GHz或更高) MB可用内存 MB可用磁盘空间

下面的软件和硬件是为产品计算机而推荐的:
支持的操作系统: Windows 2003 Server, Standard Edition Linux Red Hat Enterprise, Version 3.0
硬件需求: x86兼容CPU(Pentium 4,.2GHz或更高) GB可用内存 GB 以太网卡 MB可用磁盘空间

安装服务器程序

这个服务器的安装是很容易的。所要准备的是需要在安装期间选择一个管理员用户名和密码;如果需要的话,你可以在以后通过管理控制台来改变这个用户名和密码。
注 意:软件被设计成使网络连接模仿调制解调器或DSL线路以便节省带宽,比如NetLimiter,可以中断系统 调用和打断Flash Media Server套接字动作。错误消息“捆绑完成端口(Completion Port)失败,参数错误”出现。 在安装Flash Media Server之前,移除这种软件类型。同样,不要在Flash Media Server被安装之后再安装这种软 件类型。你可以在客户端使用这种软件类型,但不要在服务器所在的计算机上使用它。

要在Windows上安装Flash Media Server:

1. 定位到安装文件,FlashMediaServer2.exe。 这个文件位于你的安装光盘上,或者你可能已经下载了它。
2. 双击这个安装程序的图标。 安装程序被启动。
3. 跟随安装向导中的提示。
4. 接受License Agreement(许可协议)以继续安装过程。
5. 输入一个用户名和密码作为第一个有效的服务器管理员。这些值被写在fms.ini文件中。(你可以在日 后使用管理控制台来添加其他管理员。)
6. 输入Flash Media Server应该使用的服务器端口。
7. 接受为Flash Media Serve文件提供的默认位置,或是输入一个新位置用于Flash Media Server的安装。
8. 接受为Flash Media Serve程序快捷方式提供的默认位置,或是输入一个新位置用于快捷方式的安装。
9. 复查你的安装选择。点击Back来做任何需要的改变。
10. 点击Install。
11. 最后的安装步骤给了你查看Readme.htm文件的机会,启动Flash Media Server,并选择当你重启动你的 计算机时手动启动Flash Media Server的选项。选择任何你喜欢的选项,并点击Finish。 安装完成。如果你把它配置成自动启动,则Flash Media Server服务将启动。
12. 要手动启动服务器,选择“开始-> 程序-> Macromedia -> Flash Media Server 2 -> Start Flash Media Server和Start Flash Media Admin Server”。
13. 要打开Flash Media Server管理控制台,选择“开始-> 程序-> Macromedia -> Flash Media Server 2 -> Management Console”。


要在Linux系统上安装Flash Media Server:

1. 作为root用户登录(要安装Flash Media Server,这是必需的)。
2. 定位到安装文件,FlashMediaServer2.tar.gz。 这个文件位于你的安装光盘上,或者你可能已经下载了它。
3. 把这个文件拷贝到你的本地硬盘的一个目录中。
4. 打开一个打开一个shell窗口并改变到保存着这个安装文件的目录中。窗口并改变到保存着这个安装文 件的目录中。
5. Unzip shell Unzip这个安装文件:这个安装文件:gunzip flashmediaserver2.tar.gz
6. Untar这个安装文件:tar -xf flashmediaserver.tar 一个包含安装程序的目录将被创建。
7. 改变到这个目录。cd flashmediaserver2
8. 用下面的命令启动安装程序: ./installFMS 安装程序会启动并显示一个欢迎信息。
9. 按Enter键来开始安装。
10. 跟随你的屏幕上的安装指导。为Flash Media Server输入一个用户,Flash Media Server过程将作为这个用户来运行。默认是“nobody”用户。你可以在日后编辑fms.ini文件来修改这个以及其他的安全属性,假如需要的话。
11. 复查你所选择的安装选项的摘要,这些信息被显示在安装程序中。
12. 安装完成。如果你把它配置成自动启动,则Flash Media Server服务将启动。
13. 要手动启动服务器,输入fmsmgr server start。
14. 要登录到Admin Service(管理员服务)并执行管理功能,通过打开fms2_console.swf文件来打开管理控 制台。

注 意:有些杀毒软件,比如Panda Antivirus,以及那些会为系统级套接字调用安装它们自己的包装的程 序,可能导致Flash Media Server失败。(其它杀毒软件,比如Norton AntiVirus,是与Flash Media Server兼容的。) 如果你在安装Flash Media Server期间遇到了问题且有杀毒软件安装在你的计算机中,则试着先移除这些杀毒软件。

来源:http://hi.baidu.com/bluewingmyth/blog/item/1518a8349a1a4eb4d0a2d39d.html
http://blog.csdn.net/xiang08/article/details/4136670
http://wenson.iteye.com/blog/42904
http://hi.baidu.com/tips1127/blog/item/89d8f98993b5cf98a5c27250.html
前面我们可以播放声音文件了,但是不能自己控制。
下面的2个程序让我们实现自己控制播放、暂停。
程序1用Button组件实现,程序2用JButton组件实现。
--------------------程序1开始--------------------
Music.java

import java.applet.*;
import java.awt.*;

public class Music extends Applet {
Button play,loop,stop;
AudioClip audio = null;

public void init() {
 resize(200,30);
 play = new Button("play");
 loop = new Button("Loop");
 stop = new Button("Stop");
 stop.disable();
 add(play);
 add(loop);
 add(stop);
 audio = getAudioClip(getCodeBase(),"mid/fy.mid");  
}

public boolean action(Event event,Object arg) {
 if(event.target == play) {
   if(audio!=null) {
     audio.play();
     play.disable();
     loop.disable();
     stop.enable();
     showStatus("playing sound only once!");
   }else
     showStatus("Sound file no loaded");
     return true;
 }else if(event.target == loop) {
   if(audio!=null) {
     audio.loop();
     play.disable();
     loop.disable();
     stop.enable();
     showStatus("Playing sound all the time!");
   }else
     showStatus("Sound file not loaded");
     return true;
 }else if(event.target == stop) {
   audio.stop();
   loop.enable();
   stop.disable();
   showStatus("Stop playing sound!");
   return true;
 }
 return false;
}
}
点击在新窗口中浏览此图片
-----------------程序2开始------------------
Music.java

import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Music extends Applet {
JButton play,loop,stop;
AudioClip audio = null;

public void init() {
 resize(200,30);
 play = new JButton("play");
 loop = new JButton("Loop");
 stop = new JButton("Stop");
 stop.setEnabled(false);
 audio = getAudioClip(getCodeBase(),"mid/fy.mid");  

 add(play);
 play.addActionListener(
   new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       playActionPerformed(event);
     }
   }
 );

 add(loop);
 loop.addActionListener(
   new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       loopActionPerformed(event);
     }
   }
 );

 add(stop);
 stop.addActionListener(
   new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       stopActionPerformed(event);
     }
   }
 );
}

private void playActionPerformed(ActionEvent event) {
   if(audio!=null) {
     audio.play();
     play.setEnabled(false);
     loop.setEnabled(false);
     stop.setEnabled(true);
     showStatus("playing sound only once!");
   }else
     showStatus("Sound file no loaded");
}

private void loopActionPerformed(ActionEvent event) {
   if(audio!=null) {
     audio.loop();
     play.setEnabled(false);
     loop.setEnabled(false);
     stop.setEnabled(true);
     showStatus("Playing sound all the time!");
   }else
     showStatus("Sound file not loaded");
}

private void stopActionPerformed(ActionEvent event) {
   audio.stop();
   loop.setEnabled(true);
   stop.setEnabled(false);
   showStatus("Stop playing sound!");
}
}
------------------程序2结束---------------------
点击在新窗口中浏览此图片
import java.applet.*;
import java.awt.event.*;  
import java.awt.*;
/**
*

Title: Applet播放声音文件


*

Description: 使用AudioClip类加载声音文件,并当鼠标点击后开始播放


*

Copyright: Copyright (c) 2003


*

Filename: PlayAudio.java


* @version 1.0
*/
public class PlayAudio extends Applet
implements ActionListener{
AudioClip audio;  
Button btExit,btOpen,btPlay,btLoop,btStop;
/**
*
方法说明:初始化Applet
*
输入参数:
*
返回类型:
*/
public void init() {
//加载声音文件
audio = getAudioClip(getDocumentBase(),"img/1.mid");
//构造按钮
setLayout(new FlowLayout()); //使用布局管理器
btPlay=new Button("Play"); //定义Play按钮                  
btPlay.addActionListener(this); //给Play按钮添加一个监听事件
btLoop=new Button("Loop"); //定义Play按钮
btLoop.addActionListener(this); //给Play按钮添加一个监听事件
btStop=new Button("Stop"); //定义Play按钮
btStop.addActionListener(this); //给Play按钮添加一个监听事件
//将按钮添加到Applet中
add(btPlay);
add(btLoop);
add(btStop);



}



public void actionPerformed(ActionEvent e) {



 //如果点击的是Play按钮
if (e.getSource()==btPlay) {
      play();
}
//如果点击的是loop按钮
if (e.getSource()==btLoop) {
      loop();
}
//如果点击的是stop按钮
if (e.getSource()==btStop) {
      stop();
}
}
/**
*
方法说明:播放声音
*
输入参数:
*
返回类型:
*/
public void play(){
  if (audio!=null) stop();
   audio.play();
}
/**
*
方法说明:循环播放声音
*
输入参数:
*
返回类型:
*/
public void loop(){
  if (audio!=null)
   audio.loop();
}
/**
*
方法说明:停止播放声音
*
输入参数:
*
返回类型:
*/
public void stop(){
  if (audio!=null)
   audio.stop();
   
}
}

用java实现音频捕捉java /zongfeng 发表于2005-03-06 13:43
利用线程和基本库的函数就可以实现,下一篇我会贴播放代码
package chat;

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;



class Capture implements Runnable{

TargetDataLine line;
Thread thread;
Socket s;
BufferedOutputStream captrueOutputStream;

Capture(Socket s){ //构造器取得socket以获得网络输出流
this.s=s;
}

public void start(){

thread=new Thread(this);
thread.setName("Capture");
thread.start();
}

public void stop(){
thread=null;
}

public void run(){

try{
captrueOutputStream = new BufferedOutputStream(s.getOutputStream()); //建立输出流此处可以加套压缩流用来压缩数据
}
catch(IOException ex){
return;
}

AudioFormat format=new AudioFormat(8000,16,2,true,true); //AudioFormat(floatsampleRate,intsampleSizeInBits,intchannels,booleansigned, booleanbigEndian)
DataLine.Info info=new DataLine.Info(TargetDataLine.class,format);

try{
line=(TargetDataLine)AudioSystem.getLine(info);
line.open(format,line.getBufferSize());
}catch(Exception ex){
return;
}

byte[]data=new byte[1024]; //此处的1024可以情况进行调整,应跟下面的1024应保持一致
int numBytesRead=0;
line.start();

while(thread!=null){
numBytesRead=line.read(data,0,1024); //取数据(1024)的大小直接关系到传输的速度,一般越小越快,
try{
captrueOutputStream.write(data,0,numBytesRead); //写入网络流
}
catch(Exception ex){
break;
}
}

line.stop();
line.close();
line=null;

try{
captrueOutputStream.flush();
captrueOutputStream.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}

[p align=center]点击在新窗口中浏览此图片
幼儿园里,老师要小朋友一一回答自己最喜爱的动物:小狗、猫咪、金鱼……

  突然,一个小朋友大声说:“狐狸精!”老师大吃一惊,连忙问为什么,这个小朋友骄傲地说:“我妈妈说过,男人都是喜欢狐狸精的!”

  在中国男人心目中,一直有浓厚的“狐狸精情结”,“聊斋”里的一系列狐仙,不知迷倒了多少书生、后生。显然,人人都在嘴里骂狐狸精,却在心里渴望遇到她,死都不怕。即使在那个特殊年代,男人们仍然会偷偷地喜欢“女特务”的角色,因为她们会抛媚眼、会送胯摇臀,会用美人计……而今,甚至有理论家开始质疑武松性冷感并顺便为潘金莲喊冤,男人的“狐狸精情结”,终于成了一种可以公开谈论的话题。

  有无聊人士问蔡澜:羊肉那么骚,你吃它干啥?蔡澜答:羊肉不骚,女人不娇,有啥意思?如今,“狐仙”一夜间成为不少都市女性膜拜的新偶像,是因为女人们已经发现了男人的真实想法。最初是港台一些女星去庙里拜“狐仙”,主要是为增添“媚”功,好让自己的桃花运更旺。后来狐狸就窜进了寻常百姓家,拜祭者包括酒店公关小姐,政商、白领人士,女性求的是媚符,男性求的是魅符,将这些符随身携带,据说不用多久,整个人的桃花运都会变好。阅读全文
现在是00:20 上午 2006-10-3,想写点东西了,呵呵,自己开了一个博客,好多都是在网上摘抄的东西,没有自己的东西,总是感觉腰自己写的.
否则这就会失去意义,但是时间往往是事与愿违,总是让人那末难缠.于是,本人感觉是想写点什么地时候了.
  写点什么好呢,感觉还是积极一点好,上天往往让我是一个让人悲观的角色,不是吗?还让我充满了个性,这些东西,让他们去说吧.我也往往感觉
要把自己搞成一个坏人,往往装B不成反倒是让人恶搞,难免,可能还需要勤加练习,我有什么可以让人不反感的呢,唯有珍惜上天赐给我的金色华年.
都为梦中的明天.
 突然,我想到我的爷爷,都已经驾鹤西去了5年了,我却一次没有回去,而且在他在生于死的边缘,我也没有回去看他,觉得没有尽到孝敬.现在我可以想象
他的墓冢早已是荒草堆积.我也只有自己能写点东西作为祭奠仪式罢.人都圆寂了,让我感到生命的短暂,而我现在的碌碌无为,难免都让人感觉我们家族是一点
没有复兴的一点气息,思阕当年的先祖父,让我们家族繁荣一时,但是现在的我们确实那末无能,对不起啊.但我又想我的爷爷这一代人没有复兴我们家族,\但是
我们这代人应该有这个志向,我想是的.希望你能保佑我,让我在前进的途中充满力量中的力量,面对这个物欲横流的社会能够
得心应手.我觉得这才是我应该做的
  我觉得可能是晚了点,难免偶有点像意识流的写作流派.
  突然想到孤独这一个字眼,觉得我一只是一个人,天马行空,独来独往,觉得自己的交往能力难免出现一些盲区.但是,我觉得应该规结与阶层,人于类聚,物已群分.
我不可能将天下所有人给让他们搞定,而且我也有我的风格,我该怎么办?在前进的路上难免有人会因为这个问题挡住我的前进道路.我想用强力劈开这些人,结果我
失败了,羊皮卷叫我要用爱心来无不催.我要以不变为万变.
  其实我觉得我最大的敌人是我自己,可惜看了很多书就是没有让我改变,可能是我自己太糊涂了.但又有什么办法呢?于是我发现我要对自己残忍一点,强忍住自己的
内心深处,我想我什么都不是,我也是历史上的一瞬间罢了.何必要眷顾那些不变得正理事情呢.........我终于明白人是虚伪的,要用帘子来调制这种关系.......
  觉得自己还有太多的地方有待完善
好了现在都00:49 上午 2006-10-3了,以后有空在写.
现在哪.都十月了,还有这么多的事情应酬,简直就是瞎忙乎.我决定以后很少上网.除了必要之外.最大限度减少我的应酬,改省的就得减掉.OK.........
今天呢.没有干什么就是一点,那就是:我们的目的就是忽悠客户我觉得导出了现在商场的目的....
我呢,本是一个魔鬼,但是化身为人,来到你的身旁,蓦然发现,原来魔鬼世界远远没有人类世界那么复扎,呵呵.......
你确想到,我是什么啊,我也想知道啊,但是没有人向我给出答案,其实我觉得是我投奔错了人,其实我违反了:人与群分,物欲类聚.我也太有个性了的缘故吧........
我去图书馆还书的时候,还一本黑克内幕,阿姨问我近来她的QQ给丢了,......,最后到他家去了,然后就把电脑给搞定了,然后就是把密码给高回来了....呵呵smoke

山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,惟吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴,阅金经。无丝竹之乱耳,无案读之劳形,南阳诸葛庐,西蜀子云亭。孔子云:何陋之有?
陋室铭 (翻译)
山不一定要高,有仙人(居住)就能天下闻名;水不一定要深,有龙(居住)就能降福显灵。这(虽)是间简陋的房子,好在主人有美好的德行。苔藓给阶前铺上绿毯,芳草把帘内映得碧青。谈笑的是渊博的学者,往来的没有浅薄的人。可以弹奏素朴的古琴,浏览珍贵的佛经。没有(嘈杂的)音乐扰乱两耳,没有官府的公文劳累身心。(它好比)南阳诸葛亮的茅庐,西蜀扬子云的玄亭。孔子说:(虽然是陋室,但只要君子住在里面)有什么简陋的呢?



Known will the mountains be,if celestial beings dwell.No matter high or low;Charmed will the waters be if dragons hide.No matter deep or shallow. A humble abode though this is, I don’t perceive it as a humble one, because I possess lofty virtues.The stonesteps verdant with overgrown moss,and the grass greens reflect in the bamboo screen.I just talk cheerfully with the great scholars and never associate with the ignorant.I can play the Qin and read Jinjing in my abode.Neither unpleasant music grates on my ears nor official documents make me weary and tired.Both the thatched abode of Zhugeliang in Nanyang and the pavilion of Ziyun in Xishu are humble.Quoth Confucius“How canth it be humble?”

其实生活很简单,一切都很简单.我一直认为.人不可要爱情.一切又开始了,我仍然静静地等

你可知道我真的很^^^^^^一生中有许多相遇,最快乐的相遇是遇到了你.让自己恐惧,还没有得到,却已经害怕失去。开始逃避就要有人追逐.爱情,是因为有那么一双眼睛,和我一样的眼睛。隐晦的,潮湿的,不暴露任何秘密,却又说出太多秘密。

在我的身边有很多东西,我没有好好得去珍惜。现在呢?觉得好后悔。我又浪费时间了。但是我能去做什么呢?如果真的可以,我愿意和你在一起,但是现实里的残酷,这个梦会成功吗?

你了解我多少?我又了解你多少?想爱容易,想处更难!可以吗?爱能战胜所有的一切吗?网络里的语言爱情,到什么时候才会结束。结束了,你的态度又是怎么样的?我进了你的生活,你们真的能在一起很久吗?爱真的能成为万物的领导者吗?能吗?

曾多次的徘徊在爱情的路口,想爱却又不敢靠近爱神.想飞却又害怕翅膀不够坚硬.想流浪又担心不是完美的人生.我很害怕这个社会。真的,所以给给自己取了叫忧郁王子。我不知道我到底担心什么?真的我好恨,而我为什么要轻易地相信别人,为什么?

爱情的定义和标准是什么?是感觉上的一种特有产物吗?还是精神上的一种寄托,我
无法阐释爱到底是什么属性.你也许和我一样,不懂什么叫做爱.我只知道爱情是需要双方
才会建立的.你我曾经都有过一段热烈的恋情,但是我们都以失败来告终这份曾经海誓山盟
的爱情.我们都因此深深地受到极大的伤害,甚至是撕心裂肺的痛折磨着我们.或许我现在
已经患上爱情恐惧症了吧!我们都还有爱,我们的精神并不是消失.只是我们在修养和补充爱的养料.
点击在新窗口中浏览此图片

国庆节过了N多个了,但是花花水水,纷纷花落下.人生槐树下.不想写了,充满信心,永远充满活力,活出水平,我要的就是这个效果.......
好好学习,天天向上.........
我的配置:php5+mysql5+apach+winnet

$conn=mysql_connect("localhost","root","12345")
         or die("can't connetct mysql server:".mysql_error());
$dbs = mysql_list_dbs($connect);
$rows = mysql_num_rows($dbs);
$i=0;
while($i<$rows){

      $db_name[$i]=mysql_tablename($dbs,$i);
    echo$db_name[$i];
    $i++;  


              }

?>


出现:

Warning: mysql_list_dbs(): supplied argument is not a valid MySQL-Link resource in D:\usr\www\html\dblist.php on line 4

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\usr\www\html\dblist.php on line 5

2.db.php




$connect =mysql_connect("localhost","root","12345");
$create=mysql_create_db("mysql",$connect);
if($create) echo "db is ok!";
else echo "erro";


?>

erro:



Fatal error: Call to undefined function mysql_create_db() in D:\usr\www\html\db.php on line 3

发现问题:可能是函数调用问题.于是google了如下:






有啊,问题已经解决了,mysql_create_db()在PHP5.0里已经不支持了,还有mysql_drop_db()也不支持了,呵呵,是兼容性的问题,我没有装phpmysqladmin他是图形界面的吗?
我也有此问题
在win2003+php4.39下执行mysql_create_db没问题
在freeBDS5.4+php4.35下不能执行mysql_create_db(),后来我换成用mysql_query执行create database就可以了。


是不是php5.0中不能用mysql_create_db(),我试了mysql_query(),发现可以创建数据库


07年复旦大学法硕招生简章、历年分数线

   复旦大学法律硕士历年复试分数及分析:  

   02年招生情况:招生151人,分数线:349/60分  

   03年招生情况:招生150人,分数线:329/55/83分  

   04年招生情况:招生155人,报名1673人,分数线:333/55/83分  

   05年招生情况:招生155人,报名1700,分数线:335/55/83分  

   06年招生简章:招生155人。分数线:340/60/90分  阅读全文
法硕,我排除了北清人、中政、复旦,选择了对外
http://www.kaoyan.com    2006-06-04   考研论坛   lcy84020852 【字体:大 中 小】
  对kaoyan.com论坛,已经不是一句谢谢能谢完的了。考研一路,我从这拿走了太多却做的太少。写下这点东西,套句俗话,回报bbs.kaoyan.com吧。
  我不认为写下我的复习经历会对大家有多大的帮助,我相信除非其中包含了07年的标准答案,无论我的经历是多么地激动人心,也不会再在其他地方同样激动人心一次。
  倒是我选择学校的过程,私下感觉会比我的经历能给大家更多些参考。
  选择对外经历了一个不短的时间和过程,其间考虑了太多的因素。
  第一个考虑的大学,南京大学。还是刚想到考研那会,大二是时候吧。没有什么理由,可能因为在南京上学,自己也是江苏本省人,就是很喜欢南大。可是透过感性这层纱开始理性地搜索时,越查越失望:公费没有(当时在招生简章上没看到),法学院正在下路;南京这座城市则早在南大法学院下路之前就下路了,而且好象越下越快;南京也没有几家象样的律所,也没有多少太好的公司,在南京办事关系还是总在规则之前出现……
  第二个考虑是大学,厦门大学。法律人在北方太难过啦,人多,挤啊,而且看看挤的架势就知道,谁都不一定比谁差。咱去南方吧,那儿环境宜人,经济发达;机会比对手多多啦!厦门和厦门大学,找优点绝对比找缺点容易得多得多得多。但是夏大的分数线,总是三百一、三百二(前几年的事,今年淹死了不少人,呵),越看越着急,这不存心打击人看书积极性嘛!再者,分数这么低,肯定有它的原因,就相信一把“群众的眼睛是雪亮的”吧。最后,南方学校的法学水平确实不能和北方比,虽然“近水楼台先得月”,但是假如还有你更喜欢的太阳怎么办?老兄啊,只有揣进脑瓜的才是你自己的呵,“以不变应万变”是也!
  这样选下去几时能结个果呵,于是换了个方法。
  我还是相信:如果单纯想学到最多的知识,只要看学校就好了;但是如果确定毕业后就工作,就必须得同样认真地考虑学校所在地。几乎所有人都想往好地方考,远不只是扎堆、随大流那么简单,特别是对工作,又特别是对法律人的工作,好地方的好处比嚼在嘴里的大肉都要实在!
  既是学的法律,总不能跑到个法律不起作用的地方去吧:北京,长三角,珠三角,当然还有国外,不过我没钱又不想在国外工作,就算了。然后开始从这三个地方初步筛选出侯选学校(因为珠三角早被排除了,其实只是北京和长三角):北大、清华、人大、中政、对外、复旦、华政、苏大,接下来就是排除是工夫了。
  苏大:唯一看好的是地方,法学院很一般,好点的还是什么鸟行政法,讨厌啊!所以很容易就排除了——我认为其他七所中任何一所毕业后,如果真想去苏州找工作,都会比苏大毕业更好找。
  华政:考它就不如考复旦了,说不定你在复旦读三年就会有三个华政老师跟你后面进了复旦——如果不到三个,那肯定是去交大了,哈哈。再者,看看何勤华院长是吃什么饭的就知道华政强项是哪了,想来很少有法硕人是和他志同道合的吧!~
复旦:看看复旦和复旦法学院谁发展得更快就知道法学院在复旦扮演着什么角色了,这是根本啊,不可小视,呵。当然复旦还是不错的,可是一则,它分数不怎么高,提不起太多积极性;二则,应该不会有人怀疑,它不是最好的,无论从哪一方面看。
  中政:本来感觉它还是不错的,有很多公费,民商法、诉讼法很好,甚至在很长一段时间里确定就考它。不过有那么一天,一不小心发现它把咱法硕丢昌平了,伤心啊!为了不被它抛弃,只有先下手为强,抛弃它了。
  清华:人家那硬件,看了那叫眼红啊;人家那老师,看了那叫流口水啊!私认为法学院的硬件它是国内最好的,老师更是个个才华横溢,翻他们的简历,似乎翻个国内文凭倒更困难了。而且,清华强在民商,非常合胃口、实在,它还是少数几家重视法硕的学校之一。但是:一它没公费,分数又一会高一会低,复试也总是让你踩不着深浅,咱小本生意,哪玩得起啊,呵;二它把法硕放在了深圳(具体怎么放,因为我排除它较早,最新的情况不清楚),硬件就别用了,老师也折了不少,总之私认为放在深圳就不是真正的清华了;三它法学院毕竟是新起的,不怀疑它的未来,但我有点怀疑它的现在啊,好地方的校友也少得几乎为零,偶哪做得来拓荒者啊,呵!
  北大:选择北大是不需要理由的,但是排除它肯定需要理由。本来还是想考北大的,虽然它没有公费,北京也不解决住宿。但是2006年它变卦了,所有学生前一年半统统去深圳,后一年半统统回北京。鬼都知道,研究生说是三年,真正上课学习也就一年半。可是现在这一年半里:大师不见了,暴强的学生不见了,未名湖和博雅塔也不见了,北大不见了。已经不是名副其实的北大了,可我想上的是北大啊,于是作罢。
  人大:人大也在苏州有什么教学区,好象和法硕也大有关联。不过我把它排除只因一点:学制两年却收三年的钱,更要命的是咱非法本同学,本来弱在基础,只有两年时间,剖开肚皮往里塞也塞不了多少东西啊!当然还有,它不怎么重视法硕,也不喜欢它官僚气太浓的管理氛围。
  对外经贸:
  在对外,如果英语非常好,你将有最充分的施展空间;如果你想把英语学好,它也是全中国少数几个能真正帮你达到目的的地方。我想把英语学好 ,此一。
  我想做涉外法务,我想做国际仲裁,我想进跨国公司,我想进最成熟的律所……不是我头脑发热了,只是我知道做一般的法务会很需要所谓关系,可是我没有,就只能尽力往更注重能力的地方挤——关系那是几辈子的修为,能力却可以现在进行时。这些方面都是对外的强项:对外的国际法是全国仅有的三个国家级重点学科之一(另两个是武大和夏大,但是私以为对外做得最实在),对外的中国WTO研究院是全国唯一的研究世界贸易组织的国家级人文社科重点研究基地,至于法律英语和对实务的注重都已经是对外的传统了。此二。
  对外的课程非常注重应用性和实践。案例教学早已享誉国内外,而且对外是名副其实的小班上课——其实如果班太大,就不太可能真正案例教学了。对外今年生源爆满,却只招了75人,而对于真正独具特色的选修课,上课人数多在30-40人左右。这让“传说中的”应用性和实务性具有了很大的可信度——我更愿意认为这是应用性和实务性的保证。有说对外深得英美法的精髓,不无道理。此三。
  对外在繁华的朝阳闹市区,机会怎一个多字了得:东、北三环,东直门一条街,朝阳门一条街律所多如牛毛,事实上这一带集中了北京大部分好律所;至于说大公司,知道北京的人都该知道它们在哪吧!看看:中政在兔子不拉屎的昌平,北、清、人则都窝在西北角的海淀,这下该能想象对外人有多幸福了吧,近水楼台啊,如果还什么都抓不住,只好怪自己没用了,呵呵。此四。
  我自己本人大二下接触法律,上法学的课,看法学的书。到考研前,我上了隔壁南京师范大学大部分基础课——南师强在理论,所以它的基础课很好;我把那些老书从《论法的精神》一直看到了《法律的概念》,当然还有当代法学家的一些著作。自认为和很多法硕的同学比,基础更扎实些,于是很自然地降低了法学基础实力在选择中的权重。此五。
  说到这已经很明显,我会去哪了,呵。阅读全文
分页: 241/249 第一页 上页 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 下页 最后页 [ 显示模式: 摘要 | 列表 ]