Archive for December, 2005

用IO::Socket实现POST的代码

Sunday, December 18th, 2005

#!/usr/bin/perl
#####################################
# jondy
# http://blog.csdn.net/jondynet
#####################################

use strict;
use warnings;
use IO::Socket;

my $host“221.208.250.138″;
my $port“80″;
my $sock = IO::Socket::INET->new(“$host:$port”)
|| die “Socket() error, Reason : $! \n”;

print $sock “POST /secu/fch_hljcontentauthact.jsp?isADSL=0
&qs=cmV0dXJsPWh0dHA6Ly8yMjEuMjA4LjI1MC4xMzgvZm
NoX2xvZ2luL2xvZ2luLmpzcCZpY3BpZD0xMDAxJmZvcmNl
bG9naW49MCZpc3BpZD0xMDAwMSZjaGFsbGVuZ2U9MTEzND
c5MTg5NDc3MSZ0aW1ld2luZG93PTEyMzQ1Ng== HTTP/1.1\r\n”;
print $sock “Accept: image/gif, image/x-xbitmap, image/jpe
g, image/pjpeg, application/x-shockwave-flash, */*\r\n”;
print $sock “Accept-Language: zh-cn\r\n”;
print $sock “Content-Type: application/x-www-form-urlencoded\r\n”;
print $sock “Accept-Encoding: gzip, deflate\r\n”;
print $sock “User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.2; .NET CLR 1.1.4322)\r\n”;
print $sock “Host: $host\r\n”;
print $sock “Content-Length: 105\r\n”;
print $sock “Connection: Keep-Alive\r\n”;
print $sock “Cache-Control: no-cache\r\n”;
print $sock “\r\n”;
print $sock “stopformer=false&clientusername=&showordernot
ice=1&localIP=&usernameinput=username&password
input=123456\r\n”;
print $sock “\r\n”;
print <$sock>;


MySQL常用命令

Saturday, December 17th, 2005

一、连接MYSQL。
格式: mysql -h主机地址 -u用户名 -p用户密码
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
三、增加新用户。

(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;

一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。

二、显示命令
1、显示数据库列表。
show databases;
刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示库中的数据表:
use mysql; //打开库,学过FOXBASE的一定不会陌生吧
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名 (字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;

三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(”,’glchengang’,'深圳一中’,’1976-10-10′);
insert into teacher values(”,’jack’,'深圳一中’,’1975-12-23′);

注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。 (4)将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态进入目录mysqlbin,然后键入以下命令:
mysql -uroot -p密码 < c:school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用n来代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile “文件名” into table 表名;
注意:你最好将文件复制到mysqlbin目录下,并且要先用use命令打表所在的库 。

五、备份数据库:(命令在DOS的mysqlbin目录下执行)
mysqldump –opt school>school.bbb
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

DELPHI 屏幕截图

Friday, December 16th, 2005

//uses jpeg
procedure TForm1.snapscreen();
var
bmpscreen:Tbitmap;
jpegscreen:Tjpegimage;
FullscreenCanvas:TCanvas;
dc:HDC;
sourceRect, destRect: TRect;
begin
try
dc:=getdc(0);
fullscreencanvas:=Tcanvas.Create;
fullscreencanvas.Handle:=dc;
bmpscreen:=Tbitmap.create;
bmpscreen.Width :=screen.Width ;
bmpscreen.Height :=screen.Height ;
sourcerect:=rect(0,0,screen.Width ,screen.Height );
destrect:= rect(0,0,screen.Width ,screen.Height);
bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
jpegscreen:=Tjpegimage.Create ;
jpegscreen.Assign (bmpscreen);
jpegscreen.CompressionQuality:=80;
jpegscreen.SaveToFile(ExtractFilePath(ParamStr(0))+’tmp.jpg’);
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free ;
ReleaseDC(0, DC);
except
end;
end;


Perl Tk实现拖拽的例子

Wednesday, December 7th, 2005

#!/usr/bin/perl -w

use Tk;
use Tk::DragDrop;
use Tk::DropSite;
use Tk::HList;
use strict;
use vars qw($top $f $lb_src $lb_dest $dnd_token $drag_entry);

$top = new MainWindow;

$top->Label(-text => “Drag items from the left HList to the right one”
)->pack;
$f$top->Frame->pack;
$lb_src$f->Scrolled(‘HList’, -scrollbars => “osoe”, -selectmode => ‘dragdrop’)
->pack(-side => “left”);
$lb_dest$f->Scrolled(‘HList’, -scrollbars => “osoe”, -selectmode => ‘dragdrop’)
->pack(-side => “left”);

my $i=0;
foreach (sort keys %ENV) {
$lb_src->add($i++, -text => 

___FCKpd___0

);
}
# Define the source for drags.
# Drags are started while pressing the left mouse button and moving the
# mouse. Then the StartDrag callback is executed.
$dnd_token = $lb_src->DragDrop
(-event     => ‘<B1-Motion>’,
-sitetypes => ['Local'],
-startcommand => sub { StartDrag($dnd_token) },
);
# Define the target for drops.
$lb_dest->DropSite
(-droptypes     => ['Local'],
-dropcommand   => [ \&Drop, $lb_dest, $dnd_token ],
);
MainLoop;
sub StartDrag {
my($token) = @_;
my $w = $token->parent; # $w is the source hlist
my $e = $w->XEvent;
$drag_entry = $w->nearest($e->y); # get the hlist entry under cursor
if (defined $drag_entry) {
# Configure the dnd token to show the hlist entry
$token->configure(-text => $w->entrycget($drag_entry, ‘-text’));
# Show the token
my($X, $Y) = ($e->X, $e->Y);
$token->MoveToplevelWindow($X, $Y);
$token->raise;
$token->deiconify;
$token->FindSite($X, $Y, $e);
}
}
# Accept a drop and insert a new item in the destination hlist and delete
# the item from the source hlist
sub Drop {
my($lb, $dnd_source) = @_;
my $end = ($lb->info(“children”))[-1];
my @pos = (-after => $end) if defined $end;
my $y = $lb->pointery - $lb->rooty;
my $nearest = $lb->nearest($y);
if (defined $nearest) {
my(@bbox) = $lb->infoBbox($nearest);
if ($y > ($bbox[3]-$bbox[1])/2+$bbox[1]) {
@pos = (-after => $nearest);
else {
@pos = (-before => $nearest);
}
}
$lb->add($drag_entry, @pos, -text => $dnd_source->cget(-text));
$lb_src->delete(“entry”, $drag_entry);
$lb->see($drag_entry);
}
__END__

Winsock API TCPServer(Delphi)

Monday, December 5th, 2005

program exe;
{$apptype console}

uses
Windows, Winsock, SysUtils
;

var
FSocket,CSocket:TSocket
;
buf:array[0..255]of char
;
wsaData:TWSADATA
;
Server:TSockAddrIn
;
err,len,id:integer
;
const
CRLF=#13#10
;
begin
err := WSAStartup(MAKEWORD(2,0),WSAData
);
if err=-1
then
begin
writeln(‘WSAStartup初始化失败!’
);
exit
;
end
;
FSocket := socket(AF_INET, SOCK_STREAM,0
);
if FSocket=SOCKET_ERROR
then
begin
writeln(‘socket创建套接口失败!’
);
WSACleanup
();
exit
;
end
;
Server.sin_family := AF_INET
;
Server.sin_addr.s_addr:=INADDR_ANY;
//host
Server.sin_port:=htons(40400);
//port
bind(FSocket,server,sizeof(server
));
len := sizeof(server
);
getsockname(FSocket,server,len
);
if listen(FSocket,5)<>0
then
begin
writeln(‘bind绑定错误!’
);
Closesocket(FSocket
);
WSACleanup
();
exit
;
end; CSocket:=accept(FSocket,@server,@len
);
if CSocket=-1
then
begin
writeln(‘CSocket连接错误!’
);
Closesocket(FSocket
);
WSACleanup
();
exit
;
end
;
id := connect(CSocket,Server, SizeOf(Server
));
if id <>0
then
begin
strcopy(buf
,
char($00)+char($00)+char($00)+char($00)+char($00)+char($00)+char($00
)+
char($00)+char($01)+char($00)+char($CA)+char($67)+char($43)+char($B4
)+
char($7F)+char($00)+char($00)+char($01)+char($D0)+char($9D)+char($DA
)+
char($10)+char($82)+char($02)+char($F4)+char($3F)+char($02)+char($43
)+
char($FF)+char($67)+char($D7)+char($D1)+char($12)+char($33)+char($6A
)+
char($A3)+char($D8)+char($C6)+char($24)+char($D8)+char($50)+char($19
)+
char($8B)+char($26)+char($00)+char($00)+char($00)+char($00)+char($77
)+
char($77)+char($77)+char($2E)+char($59)+char($6F)+char($63)+char($6B
)+
char($73)+char($6B)+char($59)+char($2E)+char($63)+char($6F)+char($6D
)+
char($00)+char($77)+char($77)+char($77)+char($2E)+char($59)+char($6F
)+
char($63)+char($6B)+char($73)+char($6B)+char($59)+char($2E)+char($63
)+
char($6F)+char($6D)+char($00)+char($77)+char($77)+char($77)+char($2E
)+
char($59)+char($6F)+char($63)+char($6B)+char($73)+char($6B)+char($59
)+
char($2E)+char($63)+char($6F)+char($6D)+char($00)+char($77)+char($77
)+
char($77)+char($2E)+char($59)+char($6F)+char($63)+char($6B)+char($73
)+
char($6B)+char($59)+char($2E)+char($63)+char($6F)+char($6D)+char($00
)+
char($77)+char($77)+char($77)+char($2E)+char($59)+char($6F)+char($63
)+
char($6B)+char($73)+char($6B)+char($59)+char($2E)+char($63)+char($6F
)+
char($6D)+char($00
)
);
send(CSocket,buf,strlen(buf),0
);
end
;
//    数据处理
strcopy(buf
,
char($00)+char($00)+char($00)+char($00)+char($00)+char($00)+char($00
)+
char($00)+char($01)+char($00)+char($CA)+char($67)+char($43)+char($B4
)+
char($7F)+char($00)+char($00)+char($01)+char($D0)+char($9D)+char($DA
)+
char($10)+char($82)+char($02)+char($F4)+char($3F)+char($02)+char($43
)+
char($FF)+char($67)+char($D7)+char($D1)+char($12)+char($33)+char($6A
)+
char($A3)+char($D8)+char($C6)+char($24)+char($D8)+char($50)+char($19
)+
char($8B)+char($26)+char($00)+char($00)+char($00)+char($00)+char($77
)+
char($77)+char($77)+char($2E)+char($59)+char($6F)+char($63)+char($6B
)+
char($73)+char($6B)+char($59)+char($2E)+char($63)+char($6F)+char($6D
)+
char($00)+char($77)+char($77)+char($77)+char($2E)+char($59)+char($6F
)+
char($63)+char($6B)+char($73)+char($6B)+char($59)+char($2E)+char($63
)+
char($6F)+char($6D)+char($00)+char($77)+char($77)+char($77)+char($2E
)+
char($59)+char($6F)+char($63)+char($6B)+char($73)+char($6B)+char($59
)+
char($2E)+char($63)+char($6F)+char($6D)+char($00)+char($77)+char($77
)+
char($77)+char($2E)+char($59)+char($6F)+char($63)+char($6B)+char($73
)+
char($6B)+char($59)+char($2E)+char($63)+char($6F)+char($6D)+char($00
)+
char($77)+char($77)+char($77)+char($2E)+char($59)+char($6F)+char($63
)+
char($6B)+char($73)+char($6B)+char($59)+char($2E)+char($63)+char($6F
)+
char($6D)+char($00
)
);
send(CSocket,buf,strlen(buf),0
);
repeat
recv(CSocket,buf,strlen(buf),0
);
send(CSocket,buf,strlen(buf),0
);
until pos(‘Q’,buf)>0
;

Closesocket(FSocket);
WSACleanup
();
end.