这是我原来用过的两段代码,输出音频和捕获音频。
构造器里的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();
}
}
}
首先我们要拿到安装包。本人是从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.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();
}
}
}

幼儿园里,老师要小朋友一一回答自己最喜爱的动物:小狗、猫咪、金鱼……
突然,一个小朋友大声说:“狐狸精!”老师大吃一惊,连忙问为什么,这个小朋友骄傲地说:“我妈妈说过,男人都是喜欢狐狸精的!”
在中国男人心目中,一直有浓厚的“狐狸精情结”,“聊斋”里的一系列狐仙,不知迷倒了多少书生、后生。显然,人人都在嘴里骂狐狸精,却在心里渴望遇到她,死都不怕。即使在那个特殊年代,男人们仍然会偷偷地喜欢“女特务”的角色,因为她们会抛媚眼、会送胯摇臀,会用美人计……而今,甚至有理论家开始质疑武松性冷感并顺便为潘金莲喊冤,男人的“狐狸精情结”,终于成了一种可以公开谈论的话题。
有无聊人士问蔡澜:羊肉那么骚,你吃它干啥?蔡澜答:羊肉不骚,女人不娇,有啥意思?如今,“狐仙”一夜间成为不少都市女性膜拜的新偶像,是因为女人们已经发现了男人的真实想法。最初是港台一些女星去庙里拜“狐仙”,主要是为增添“媚”功,好让自己的桃花运更旺。后来狐狸就窜进了寻常百姓家,拜祭者包括酒店公关小姐,政商、白领人士,女性求的是媚符,男性求的是魅符,将这些符随身携带,据说不用多久,整个人的桃花运都会变好。


$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(),发现可以创建数据库
物理系的女生追不得:听说用马桶上接电线的方法杀人只有物理系的人能干;
生物系的女生追不得:含情脉脉的眼神看着你的200多块骨头和600多块肌肉;
美术系的女生追不得:她们看到你会把你想象成为一个个赤身裸体的模特;
化学系的女生追不得:小心分手的时候硫酸让你毁容;
中文系的女生追不得:一帮整天看浪漫的爱情的小说的家伙;
英语系的女生追不得:你想让你的孩子在出生之前就接受洋奴教育;

错误
有可能您发现了 SQL 分析器的臭虫。请仔细检查您的查询,包括引号是否正确及是否匹配。其它可能的失败原因可能由于您上传了超过引用文本区域外的二进制数据。您还可以在 MySQL 命令行界面试一下您的查询。如果可能的话,以下会列出 MySQL 服务器的错误输出,这可能对您解决问题有一定的帮助作用。如果您仍然有问题,或者命令行界面执行成功而分析器出错,请将您的 SQL 查询缩减到导致问题的某一条语句,然后和下面剪切区中的数据一起提交一个臭虫报告:
----开始剪切----
eNodTlFvgkAM7vP9ij74oAmcd5Uxc3ti5KImCOxA9qpkRlkIY5otbj9+rpDma7827ffVOpc5g7HG
mDCxqUGFGrUKRVHy/C5EXBUGJ5s3g9fPtj9crseLbJta9ufe+0aSAUmSGkmph7nWc1qiXhpamICw
a96PLdpbjxOx/SleEoOBVJJCv/04iV3hMCs8jFY2LT2sLPu9Nh1uLIZSiXwbGZZ/lMrvWxL5Oh9W
vKwYRALJ3zbd100kUboy+Hv2TzUtNInR5f4XgwMLEZSckXMEz5CMfA+HMWpmCFMQHHvQY1fxnoMY
1mOd8kQzZowUMlYZ6o51EmbD3Qye/gGBbEVh
----结束剪切----
----开始原文----
ERROR: C1 C2 LEN: 0 1 106
STR:
CVS: $Id: sqlparser.lib.php,v 2.42.2.1 2005/11/28 18:23:42 nijel Exp $
MySQL: 4.0.26-log
USR OS, AGENT, VER: Win IE 6.0
PMA: 2.7.0-pl2
PHP VER,OS: 4.4.2 Linux
LANG: zh-gb2312
SQL: 﨏REATE TABLE `aaab` (
`1` VARCHAR( 1 ) NOT NULL
);
----结束原文----
SQL 查询:
﨏REATE TABLE `aaab` ( `1` VARCHAR( 1 ) NOT NULL );
MySQL 返回:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '
,于是否,本人经过排查发现是由于我用*.sql的保存方式不是ANSI造成的,于是我也使用了UTF8,Unicode(二进制)同样出现相同错误,本人然后改为ANSI即可.
第二个问题是:
建立表格时候:
CREATE TABLE `bbb` (
`1` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
不同的PhpMyadmin出现问题.
我的服务器是linux上跑的apach,然而我将上面几句写入sql的时候,发现出现错误:
错误
SQL 查询:
CREATE TABLE `bbb` (
`1` text NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET = latin1;
MySQL 返回:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=utf8' at line 3
,于是改进如下:
CREATE TABLE `bbb` (
`1` text NOT NULL
) ;
或者改为:
你用phpmyadmin在它的上面建立一个表,看看它是怎么搞的代码,然后修修改改即可,主要是他支持的语言可能有限在不同的mysql version中,不会向下兼容,在4.01版本和5.0版本间,没办法,Mysql就是要有好的速度优势在linuxUNix上跑的话是很流畅的.
最后,祝贺各位中秋快乐.国庆玩的好,完毕!
[实践OK] Vi的替换命令,VIM中能否替换光标选中的字符串?
在整个文件的各行或某几行的行首或行尾加一些字符串。
---- vi file
---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
---- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
---- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
---- 注意: 其中s为substitute,%表示所有行,g表示global。
VIM中能否替换光标选中的字符串?如下:
大写的V,移动j,k上下选中后,按下冒号,此时vim的命令行显示::'<,'>,后输入s,再输入斜杠,斜杠输入你要替换的单词后,再一个斜杠,输入你现在新的替换内容,再输入一个斜杠后输入g,即可替换可视化后选中里面内容,不替换整个文本。如下:
在vi里把其中一行双引号替换为单引号:
$date = array("<"=>"<",">"=>">","\""=>"'",""=>"",);
替换为:
$date = array('<'=>'<','>'=>'>','\''=>''',''=>'',);
方法:
一、选中一行:Shift+V ,或移动到行首:0 ,;ctrl+v (块选开始),$ (shift+4:到行尾),一样能选一行。
二、替换: 冒号,shift+; (;上面是冒号), 输入:s 斜杠 被替换的东西 斜杠 替换为的东西 斜杠 g :
:'<,'>s/"/'/g
'<,'>是按冒号vi自动生成的。
摘自:http://ar.newsmth.net/thread-5b1a985c3fcc8a-1.html
Apache+php+mysql在windows下的安装与配置图解(最新版)
我也没有专门研究过mysql,但由于以前在windows编程中常要用到sql数据库,会一些sql语法。才装上mysql,做了些摸索,行家莫笑。
1.打开mysql:
$mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.1.7
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
2.获取创建数据库及其表的权限:(这里练习,可以不用,后面用到)
mysql> grant all on samp_db.* to paul@localhost identified by "secret";
Query OK, 0 rows affected (0.10 sec)
3.创建samp_db(示例)数据库
mysql> create database samp_db;
Query OK, 1 row affected (0.06 sec)
4.使samp_db数据库成为当前数据库:
mysql> use samp_db;
Database changed
查看一下:
mysql> select database();
+------------+
| database() |
+------------+
| samp_db |
+------------+
1 row in set (0.00 sec)
5.在samp_db数据库中建立表:
mysql> create table test_tab (last_name varchar(15) not null, first_name varchar (15) not null, suffix varchar(5) null, city varchar(20) not null, state varchar( 2) not null, birth date not null, death date null );
Query OK, 0 rows affected (0.30 sec)
看看表的结构,是否符合要求:
mysql> describe test_tab;
+------------+-------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+------------+-------+
| last_name | varchar(15) | | | | |
| first_name | varchar(15) | | | | |
| suffix | varchar(5) | YES | | NULL | |
| city | varchar(20) | | | | |
| state | char(2) | | | | |
| birth | date | | | 0000-00-00 | |
| death | date | YES | | NULL | |
+------------+-------------+------+-----+------------+-------+
7 rows in set (0.06 sec)
看看数据库中有没有其它表:
mysql> show tables;
+-------------------+
| Tables_in_samp_db |
+-------------------+
| test_tab |
+-------------------+
1 row in set (0.00 sec)
再看看有哪些数据库;
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| samp_db |
| test |
+----------+
3 rows in set (0.00 sec)
6.试着在在表中加入一条记录:
mysql> insert into test_tab values('jinzhi','chen',null,'盐城yancheng','1','196 5.1.16',null); insert into test_tab values('jinzhi','chen',null,'盐城yancheng',
Query OK, 1 row affected (0.32 sec)
看看加入后是否符合要求:
mysql> select * from test_tab
-> ;
+-----------+------------+--------+--------------+-------+------------+-------+
| last_name | first_name | suffix | city | state | birth | death |
+-----------+------------+--------+--------------+-------+------------+-------+
| jinzhi | chen | NULL | 盐城yancheng | 1 | 1965-01-16 | NULL |
+-----------+------------+--------+--------------+-------+------------+-------+
1 row in set (0.06 sec)
mysql>
下面就看你的了

大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对split的写法糊里糊涂……如果有此疑问的话,请看下面我对例子的解释,相信您会对这个有一定的了解。
我先介绍一下Split函数的用法:
返回值数组 = Split("字符串","分割符")
假设变量strURL保存着URL值,如strURL = "ftp://username:password@server",这是我们在IE中登录到FTP上时的URL形式,如果我们想把其中的 username和password取出来的话,该怎么办呢?当然解决的方法有许多,在这里我们只介绍用Split来解决的方法。首先,我们找出分割符。我们发现在这个字符串中,username和password之间有个冒号把它们隔开了,所以我们就把这个冒号作为Split函数的"分割符"来分割整个字符串,最后达到取username和password的目的。代码如下:
strURL = "ftp://username:password@server"
aryReturn = Split(strURL,":")
这样我们就把字符串用冒号分割开了,分割后的结果保存在aryReturn中(aryReturn是一个数组)。
下面我们就来看看这个最终的结果吧,因为Split函数最终返回的是一个数组,所以我们主要就是显示数组中的元素了,就要涉及到一些跟数组有关的函数:IsArray()判断是否数组的函数,LBound()取数组的下标,UBound()取数组的上标。
Response.Write("返回值是否为数组:" & IsArray(aryReturn) & "
")
For i = LBound(aryReturn) To UBound(aryReturn)
Response.Write("返回值数组中的元素[" & i & "]:" & Right(aryReturn(i),Len(aryReturn(i))-2) & "
")
Next
通过上面的代码,我们看到字符串被分割成三个部分,即:"ftp"、"//username"、"password@server"。我们要取username和password需要进一步的处理,我就不多说了,直接给出代码。
取username的代码:
strUsername = Right(aryReturn(1),Len(aryReturn(1))-2)
取password的代码:
'取password我们又用到Split函数了,不过这回的分割符是"@"
aryTemp = Split(aryReturn(2),"@")
strPassword = aryTemp(0)
'我们可以顺便取出server
strServer = aryTemp(1)
分割符可以是一个字符,也可以是一个字符串。如:
aryReturn = Split("ftp://username:password@server,"//")
注意:
1.一般来说,ASP中可以不声明变量,使用Split函数时,如果要声明返回值的变量的话,只能用Dim,而不能用Redim。虽然说其返回是一个数组,应该是用Redim也可以,但在实际使用过程中是不行。不知是怎么回事?
2. 如果用Split函数来分割一个字符串中并不存在的分割符时,将返回整个字符串,其结果是只有一个元素的数组。
后话,对于要取一字符串中的某些字符或部分,只要抓住规律,再加上用split就可以很好做成各种效果。写此文,希望对大家的学习有所帮助,同时也希望各路高手能够指点一二!
2005-10-26 作者:向东 来源:中央民大
文章关键字:Web,数据库技术 模仿QQ的实现
一、引言
OICQ目前中国最大的计算机通讯软件,它的使用遍及几乎所有的中国地区。它极大地推动了网络的发展,已经成为Internet中最流行、最主要的信息聊天服务方式。它把各种类型的信息资源,如静态图象、文本、数据、视频和音频有机地结合起来,使用户能够在电脑上浏览、查询和共享以及建立在WWW服务器所有站点上的超媒体信息,渐渐成为通讯行业的QQ帝国。目前QQ使用的通讯技术与数据库管理(DBMS)相互融合的研究领域已成为热点方向之一,数据库厂家和相关的公司也纷纷推出各自的软件产品和中间件支持OICQ技术和相关服务技术的融合,将两者取长补短,发挥各自的优势,使用户可以在OICQ平台上方便地检索数据库的内容。所谓OICQ系统是指基于INTERNET客户端和服务器模式信息服务,充分发挥DBMS高效的数据存储和管理能力,以Web浏览器 /服务器(B/S)和客户端/服务器(C/S)混合模式为平台,将客户端
统一的超大服务平台,为用户提供使用简便、内容丰富的服务。
二、分析Oicq的协议报文
我个人认为在此基础上大型数据库管理系统必将成为Internet和Intranet提供的核心服务,为Internet上的软件开发提供技术支持。在此,本人将对OICQ的相关通讯协议作分析和自己个人见解和有关的实现方式作一定的介绍,重点是介绍他的服务器技术和本人的的一点见解!
它的数据传送没有经过加密,于是对OICQ服务器系统网络捕包分析及其通讯协议分析研究成为可能,如下:
协议:协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。
OICQ用户到OICQ服务器的通讯协议引导符(0x81+0x0A+0x01)报文类型报文内容报文说明
0x01昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许
0x02服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身
0x03服务号(L)+对方服务号(L)+内容(S)发送信息到某人
0x04服务号(L)+组号(L)+内容(S)广播信息,组号=0为全体
