前面我们可以播放声音文件了,但是不能自己控制。
下面的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]点击在新窗口中浏览此图片
幼儿园里,老师要小朋友一一回答自己最喜爱的动物:小狗、猫咪、金鱼……

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

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

  有无聊人士问蔡澜:羊肉那么骚,你吃它干啥?蔡澜答:羊肉不骚,女人不娇,有啥意思?如今,“狐仙”一夜间成为不少都市女性膜拜的新偶像,是因为女人们已经发现了男人的真实想法。最初是港台一些女星去庙里拜“狐仙”,主要是为增添“媚”功,好让自己的桃花运更旺。后来狐狸就窜进了寻常百姓家,拜祭者包括酒店公关小姐,政商、白领人士,女性求的是媚符,男性求的是魅符,将这些符随身携带,据说不用多久,整个人的桃花运都会变好。阅读全文
我去图书馆还书的时候,还一本黑克内幕,阿姨问我近来她的QQ给丢了,......,最后到他家去了,然后就把电脑给搞定了,然后就是把密码给高回来了....呵呵smoke
我的配置: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(),发现可以创建数据库


[p align=center]计算机系的女生追不得:看看电脑的更新速度;

物理系的女生追不得:听说用马桶上接电线的方法杀人只有物理系的人能干;

生物系的女生追不得:含情脉脉的眼神看着你的200多块骨头和600多块肌肉;

美术系的女生追不得:她们看到你会把你想象成为一个个赤身裸体的模特;

化学系的女生追不得:小心分手的时候硫酸让你毁容;

中文系的女生追不得:一帮整天看浪漫的爱情的小说的家伙;

英语系的女生追不得:你想让你的孩子在出生之前就接受洋奴教育; 阅读全文
今天,本人写了一个PHP的Mysql的小shell.于是用了多个版本的PhpMyadmin,发现出现问题如下:
错误
有可能您发现了 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上跑的话是很流畅的.
最后,祝贺各位中秋快乐.国庆玩的好,完毕!

命令模式下: Vi的替换命令: :ranges/pat1/pat2/[g][i] 其中 : 这是Vi的命令执行界面。 range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。 s 表示其后是一个替换命令。 pat1 这是要查找的一个正则表达式 pat2 这是希望把匹配串变成的模式的正则表达式 g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串 i可选标志,带这个标志表示忽略大小写匹配参考:正则表达式之道以前一直不知道怎么替换。



在整个文件的各行或某几行的行首或行尾加一些字符串。
  ---- 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
我电脑装上linux才N个月,特别是对rhel 4感觉很好,看过我贴的烂帖子的人,一定看得出是小菜鸟,看到网上很多姐妹对sql有兴趣(也可能是兄弟,但不是说菜鸟),反映不习惯,无从下手,看了半天书,感到很难。就装了个mysql学习一下。
我也没有专门研究过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>
下面就看你的了
译者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我个个觉得这文章写得一般,代码也不是非常专业,但是它比较短,而且一时间也找不到好一点的文章,就把这个译过来了。其实PHP手册里也有一节是说多文件上传的,大家可以对比对比。文章内有的字句译出来不太顺眼,所以按照原意作了一定量的修改。本人水平有限,还望各位高手多指点。阅读全文
主题:ASP中Split函数的实例

  大家有碰到过要想取一字符串里的某些值而无从下手?有没有觉得看书或教材对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就可以很好做成各种效果。写此文,希望对大家的学习有所帮助,同时也希望各路高手能够指点一二!
[p align=center]OICQ技术的分析和实现攻略
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为全体阅读全文




for的高级运用






/*

** 打印必要的说明文字

*/

print("距离星期一还有几天?\n");

print("
    \n");

    for($currentDate = date("U"); //定义$currentDate时间格式

    date("l", $currentDate) != "Monday"; //判断是不是当前系统时间是Monday

    $currentDate += (60 * 60 * 24))//当前时间加上1天

    {

    /*

    ** 打印时间名称

    */

    print("
  1. " . date("l", $currentDate) . "\n");

    }



    print("
\n");

?>



对于WAP开发者来说,非常实用的代码.
可以判断访问者是使用手机还是使用电脑访问
从而进入不同目录.
<%
if instr(request.ServerVariables("HTTP_USER_AGENT"),"Mozilla")=0 then
response.redirect "/wap" '如果客户端为手机访问,则进入/wap目录
else
response.redirect "http://siyizhu.com/" '如果客户端不是手机访问,则进入指定地址
end if
%>

其实,上面的asp代码中,response.redirect并不是在所有地区所有手机上都可以成功的。例如,response.redirect "http://xxx.xxx.com/xxx.dll?xxx",客户可以直接进去“”中的地址,但是通过asp文件再redirect是不行的。各位有没有更好的解决办法?

这个是不对的吧,搜索引擎的蜘蛛也没有Mozilla,我印象中是这样的啊

我站上用的是:
<%
Response.Buffer = TRUE
Dim IsWap
httpAccept = LCase(Request.ServerVariables("HTTP_ACCEPT"))
if Instr(httpAccept,"wap") then
IsWap=1
Else Response.Redirect "/index.html" : Response.Flush : Response.End
End if
%>
分页: 269/271 第一页 上页 259 260 261 262 263 264 265 266 267 268 269 270 271 下页 最后页 [ 显示模式: 摘要 | 列表 ]