我的一片天

我的一片天
posts - 27, comments - 12, trackbacks - 0, articles - 16
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

     摘要: 1.设置TWSocketServer的port作为监听端口.

2.对于来自客户端的连接,必须先对TWSocketClient进行继承。

TTcpSrvClient = class(TWSocketClient)
public
//自定义的属性

end;

3.设置TWSocketServer的部分属性

.Port:=inttostr(usePort); //动态指定,来自www.cnitblog.com/xkz
.Banner:=''; //清除客户端连接后的自动信息
.BannerTooBusy:='';
.ClientClass:= TTcpSrvClient; //指定继承后的类,当客户端连入时,自动创建及释放

4.在ClientConnect(Sender: TObject; Client: TWSocketClient;
Error: Word)事件中,设置客户端有数据  阅读全文

posted @ 2009-10-07 22:40 xyz 阅读(2790) | 评论 (0)编辑 收藏

     摘要: 在服务器端,Delphi将自动为每一个阻塞方式的连接分配一个新的线程,并通过TServerClientThread来操纵每一个线程。所以不能通过对象库中的向导来创建线程对象,只能手工建立一个TServerClientThread的派生类,然后重载ClientExcute方法。Procedure TServerThread.ClientExcute;  阅读全文

posted @ 2009-09-18 16:46 xyz 阅读(1796) | 评论 (0)编辑 收藏

     摘要: ASP在采用地址方式传递参数时,比如a.asp?express=v+3.0,当参数传输到ASP的服务端时,参数将变成v 3.0,加号变成了空格.造成传输的表达式不正确。

需要在传输参数前,把+号变成%2B这样才可以正确传输。
ex=replace(ex,"+","%2B")

  阅读全文

posted @ 2009-08-27 00:47 xyz 阅读(1032) | 评论 (1)编辑 收藏

     摘要: 采用AJAX的方式载入文本内容时,由于文本内容带有回车换行符号,在进行变量设置时,回车换行符会造成截断代码行,本来应该是一行的指令,变成多行不完整的指令。

比如:一个内容有3行,那么在对txt变量进行赋值时就会变成

txt="中国

美国

英国"

在进行脚本解析时就会出错。



因此在文本输出时,就要对内容进行编码,然后到客户端脚本时再解码

txt=escape(rs("strContent"))

response.write "form1.bbstxt.value=unescape("""&txt&""")"

  阅读全文

posted @ 2009-08-12 01:04 xyz 阅读(313) | 评论 (0)编辑 收藏

     摘要: DTS是SQL Server中用于完成一系列数据调度的工具,由于它的特殊性,在程序中操作DTS包是件麻烦的事情。
但是微软还算很厚道,留了一个接口,让用户在自己开发的程序中,可以无障碍的使用DTS包。本文讲述的就是如何在Delphi中操作DTS包。

  阅读全文

posted @ 2009-07-30 16:00 xyz 阅读(392) | 评论 (0)编辑 收藏

     摘要: 最近在最一个用recordset更新的代码,发现一个很奇怪的问题,明明只select到了一条记录,但是update的时候,发现很多条记录被修改了.

通过排查,才知道由于update的时候只修改了一个字段的值,因此也只select了要修改的字段,由于这个字段的值有很多条记录是一样的,单独select这个字段,然后udpate时,recordset自动把所有相同值的记录行全部更新了,即使select的时候只有1行记录。

解决方法:

select多一个字段,这个字段不会跟别的记录行重复.
  阅读全文

posted @ 2009-05-25 15:49 xyz 阅读(574) | 评论 (0)编辑 收藏

     摘要: 根据需要把字符串转成二进制,由于汉字无法用ASCB取得正确的内码,需要用Server.URLEncode进行转换。



function strToBin(s)
dim tmpI,tmpR,tmpV,tmpC
tmpR=""
for tmpI=1 to len(s)
tmpC=mid(s,tmpI,1)
tmpv=asc(tmpC)
if tmpV<0 then
tmpC=Server.URLEncode(tmpC)
tmpV=int("&h"&mid(tmpC,2,2))
tmpR=tmpR&chrb(tmpV)

tmpV=int("&h"&mid(tmpC,5,2))
tmpR=tmpR&chrb(tmpV)
else
tmpR=tmpR&chrb(tmpV)
end if
next
strT  阅读全文

posted @ 2009-05-08 11:36 xyz 阅读(638) | 评论 (0)编辑 收藏

     摘要: Indy10把参数由AThread换成AContext后,用法已经不同.

OnConnect中获取来源IP
AContext.Connection.Socket.Binding.PeerIP;

OnExecute中处理客户端来的数据
Var
aThread:TIdMappedPortContext;
s:string;
begin
aThread:=TIdMappedPortContext(aContext);
s:=aThread.netdata;
//.....(处理过程)

end;

OnOutboundData中处理服务端过来的数据
Var
aThread:TIdMappedPortContext;
s:string;
begin
aThread:=TIdMappedPortContext(aContext);
s:=aThread.netdata;
//..  阅读全文

posted @ 2009-04-17 00:03 xyz 阅读(1540) | 评论 (0)编辑 收藏

     摘要: Delphi中用临界区线程同步
多线程程序中,如果各个线程要访问同一个资源,如同一个变量
这时就要使用线程同步技术,才不会使线程之间产生冲突和干扰
线程同步有多种办法,使用临界区是其中最简单,也是效率最高的办法(CPU占用时间最少)
使用临界区代码如下:
先声明一个TRTLCriticalSection类型的全局变量
var
MyCs: TRTLCriticalSection;
在程序开始或建立线程之前,初始化
InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
EnterCriticalSection(MyCs); //进入临界区
try
//程序代码
finally
LeaveCriticalSection(MyCs); //  阅读全文

posted @ 2008-08-23 22:28 xyz 阅读(1059) | 评论 (0)编辑 收藏

     摘要: 由于DELPHI不允许unit单元的循环引用,而类的成员在定义时,必须要用interface里的类型,因此要实现类成员的互相引用,必须用变通的方法.

  阅读全文

posted @ 2008-08-18 18:27 xyz 阅读(1435) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3