置顶随笔

[置顶]Visual AssistX 破解 补丁

摘要: Visual.Assist.X.v10.4.1649.0.WinALL.Cracked-BRD.rarVisual.Assist.X.10.4.1646V10.3.1555下载 ,适合VC6,在VS2003.net以及VS2005.net中 本地下载visual_assist_1555_破解.7zVisual.Assist.X.v10.4.1624.0Visual.Assist.X.v10.4.1619.0阅读全文

posted @ 2008-11-25 10:02 LT 阅读(1322) 评论(0) 编辑

[置顶]推荐几款vs2005的插件

摘要: vs2005的插件阅读全文

posted @ 2008-11-14 14:18 LT 阅读(586) 评论(0) 编辑

[置顶]每个[NET]开发人员现在应该下载的十种必备工具

摘要: http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx?mfr=true阅读全文

posted @ 2007-08-27 12:57 LT 阅读(171) 评论(0) 编辑

[置顶][原创]Ajax UpLoadFile 多个大文件上传控件及应用范例

摘要: [版本更新 uploadfile 1.13] 添加IE7支持阅读全文

posted @ 2007-05-06 16:05 LT 阅读(10698) 评论(49) 编辑

2012年1月27日

[转载]TCP打开端口数和打开连接数限制系列文章

[转载]TCP打开端口数和打开连接数限制系列文章

posted @ 2012-01-27 17:22 LT 阅读(6) 评论(0) 编辑

2012年1月16日

UDP错误10054:远程主机强迫关闭的解决方法---转载

UDP错误10054:远程主机强迫关闭了一个现有的连接

原文地址:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1887.aspx

在 公司一项目的UDP消息服务开发中时不时的会遇到这样一个问题:在UDP通信过程中,如果客户端中途断开,服务器会收到一个 SocketException,错误ID为10054,描述是“远程主机强迫关闭了一个现有的连接”,紧接着的事就可怕了,UDP服务终止监听,所有客 户端都受到了影响。也就是说一个客户端引起的异常导致了整个系统的崩溃。这个问题可是太严重了。

地球人都知道,UDP是无连接的,怎么会出现这个异常呢?百度了一圈,发现有这个问题的现象还不少,可就是没有一个有效的回复。再GOOGLE一圈,有点眉目了。找到了一个微软的解释和一个DOTNET的解决方法:

微软的解释:http://support.microsoft.com/kb/263823

DOTNET的处理方法:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1887.aspx

不过处理方法似乎对参数的设置不太正确:
byte[] optionInValue = { Convert.ToByte(true) };
byte[] optionOutValue;

按照这样设置还是会抛出该异常。
首先,根据微软的解释,optionInValue 传入的应该是false,而不是true;
其次,根据微软的解释,optionOutValue应该是一个DWORD值,不应不赋值,或设为null。

根据以上两点,将以上两句改为:
byte[] optionInValue = { Convert.ToByte(false) };
byte[] optionOutValue = new byte[4];

经过测试,模拟500个用户进行登录、收发消息、注销、异常退出、再连接,均没有再抛出该异常。服务表现稳定。

在 UDP通信过程中,如果客户端中途断开,服务器会收到一个SocketException,错误ID为10054,描述是“远程主机强迫关闭了一个现有的 连接”,紧接着的事就可怕了,UDP服务终止监听,所有客户端都受到了影响。也就是说一个客户端引起的异常导致了整个系统的崩溃。

找了好几天了。终于找到了解决办法。

在初始化对象后设置属性如下:

uint IOC_IN = 0x80000000;
uint IOC_VENDOR = 0x18000000;
uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
ClientSocket.IOControl((int)SIO_UDP_CONNRESET, new byte[] {Convert.ToByte(false)}, null);

Socket.IOControl 方法 (IOControlCode, Byte[], Byte[])

使用 IOControlCode 枚举指定控制代码,为 Socket 设置低级操作模式。

参数
ioControlCode

一个 IOControlCode 值,它指定要执行的操作的控制代码。

optionInValue

Byte 类型的数组,包含操作要求的输入数据。

optionOutValue

Byte 类型的数组,包含由操作返回的输出数据。

返回值

optionOutValue 参数中的字节数。

异常

异常类型
条件

SocketException

试图访问套接字时发生错误。有关更多信息,请参见备注部分。

ObjectDisposedException

Socket 已关闭。

InvalidOperationException

试图不使用 Blocking 属性更改阻止模式。

备注

此方法提供对 Socket 类的当前实例所基于的操作系统 Socket 的低级访问。有关更多信息,请参见 MSDN Library 中的 WSAIoctl 文档。

本人体会:

这个问题的是害死不少人

 

posted @ 2012-01-16 23:26 LT 阅读(4) 评论(0) 编辑

2011年11月6日

应用程式上屏蔽flash控件的右键菜单并获得左键消息_c#

使用FLASH做界面美化是一种较为常见的方式,FLASH动画制做简单,美观大方,而且将FLASH嵌入到应用程式界面上也是很容易的,只要放置 一个Shockwave Flash控件即可。但这样做出来的界面有两个问题,一是在FLASH上点击右键会有FLASH的菜单,二是在FLASH上点击的鼠标消息从应用程式里是 获取不到的,FLASH控件并不会向用应程式发送WM_LBUTTONDOWN等鼠标消息。
解决的办法应该有很多,我使用了自定义窗口过程的方法,经过试验效果不错。以下都基于Visual C 6.0和MFC环境:
首先需要为Flash控件生成变量,这一步借助ClassWizard能够轻松完成,略过。假如我们生成的Flash对象名为m_Flash1。下面就通过SetWindowLong函数为Flash控件自定义一个窗口过程:
LONG oldWndProc = NULL;
oldWndProc = ::SetWindowLong(m_Flash1.m_hWnd, GWL_WNDPROC, (LONG)MyProc);
其中m_Flash1.m_hWnd用来取得FLASH控件的窗口句柄,常数GWL_WNDPROC表示我们要修改的是窗口过程,MyProc是个自定义的窗口过程,函数返回旧的窗口过程的地址。下面就是这个自定义的窗口过程:
LONG MyProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
...{
if(msg == WM_RBUTTONDOWN) // 屏蔽右键
return 0;
return CallWindowProc((WNDPROC)oldWndProc, hwnd, msg, wParam, lParam); //调用原来的窗口过程
}
这 里通过判断消息的类型是不是右键按下来屏蔽右键菜单,假如右键被按下,那么函数就直接返回,不去调用原来的窗口过程,因此右键菜单就不会出现了。假如要捕 获鼠标左键消息,也能够在这里来处理,例如,下面的代码插在return语句之前则能够实现鼠标左键在FLASH上拖动时窗口能够随之拖动的效果:
if(msg == WM_LBUTTONDOWN)
PostMessage(AfxGetApp()->m_pMainWnd->m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);值得注意的是,这里我只是向消息队列里又发送了一个WM_NCLBUTTONDOWN消息,而并没有让函数返回,因此后面的 CallWindowProc仍然会被调用,因此并不会影响到FLASH本身对鼠标左键的处理,使用起来效果很好,几乎看不出来这里是用FLASH制做的 了。

http://blog.csdn.net/songthin/archive/2007/02/14/1510210.aspx

posted @ 2011-11-06 17:40 LT 阅读(14) 评论(0) 编辑

2011年9月21日

AJAX分段下载/读取HTML内容(有效节省带宽加快运行速度)

AJAX分段下载/读取HTML内容(有效节省带宽加快运行速度)

        本来以为自己已经算是对AJAX技术了如指掌了,因为从3年前就一直用XMLHttpRequest对象做一些无刷新页面的处理工作,但是,直道今天在工作中遇到了一个分段读取内容的问题,我才了解到,自己原来还需要补充。

         基本的问题是这样的:
         我需要设计一个框架,需要承载500万以上用户访问(公司毕竟是中国用户最多的互联网企业)。我们用了大量的静态化技术,为了应对可能出现的高负载,我们 还是用了一些公司内自主研发的高性能静态WEB服务器。由于页面是静态生成的,我们遇到一个问题,就是如何在某一时刻更新了某个静态文件后,在前台进行 AJAX的加载。起初对这个问题想得比较简单,认为只要加载然后赋值并显示即可,但是在以前血的教训下(当加载的内容非常大,IE浏览器渲染显示的时候会 非常慢,给用户明显的跳动刷新的感觉。),我们决定对于文件进行分段加载,这样做不但解决了一次加载过大文件的问题,同时也为服务器省下了一些处理时间和 资源,尽可能快地结束HTTP请求。

         解决方案:
         我拿到这个问题,在设计的过程中首先考虑的是,分段请求应该就是类似于FlashGet之流,进行分段请求而已,只需要构造自己的HTTPRequest 请求的Headers就能够达到目的,因为对HTTP协议还算是比较熟悉,所以我的分析应该是没错,如果是在.net中,我会毫不犹豫地利用 WebHttpRequest()进行请求的封装,通过设置Range字段来实现上述的功能,但是,问题是在静态页面的JS里面利用 XMLHttpRequest来实现,就有一定的难度了,毕竟从来没有接触过。查阅了大量的资料后发现,在XMLHttpRequest里面确实可以设置 SetHeader(),最终决定使用Prototype.js里面现成的封装来实现,具体实现如下——

<script language="javascript">
                   //alert($("Shadow").innerHTML);
                   var myarray = new Array();
           myarray.push("Range");
           myarray.push("bytes=0-");
           myarray.push("Pragma");
           myarray.push("no-cache");
           myarray.push("Cache-Control");
           myarray.push("no-cache");
           alert(myarray[1].toString());                
                   function myAJAX(){
                   new Ajax.Request('replace.php', {
                     method:'get',
                     requestHeaders:myarray,
                     onSuccess: function(transport){
                       var json = transport.responseText;//.evalJSON();
                       alert(json);//.a);
                       //var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON();
                       //alert(data.name);
                     }
                   });

                   }
                
                
           </script>

为了测试,我使用Array.push()方法建立数组,没有直接初始化数组,一段儿测试代码大家将就看看,我说一下比较重要的几点:

         1、Prototype里面RequestHeaders是一个数组,作为参数的内容必须是个数组;
         2、Prototype里面这个参数是可选得;
         3、Prototype里调用Ajax.Request()的时候加参数的方法和其他参数一样——“requestHeaders:myarray,”参数用逗号分割。
         4、Prototype里设置分段的方法如下——
Range头域可以请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999

GEThttp://download.microtool.de:80/somedata.exe
Host:download.microtool.de
Accept:*/*
Pragma:no-cache
Cache-Control:no-cache
Referer:http://download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-

以上是一个测试的头,注意Range字段!

前段时间跳槽了,所以很久没来写文章,现在压力很大啊,感觉这么大个项目自己要亲自去设计,还是蛮有压力的,只能努力工作、祝自己好运了!在工作中如果发现什么觉得有价值的技巧,我会在这里跟大家进行分享。

posted @ 2011-09-21 20:45 LT 阅读(25) 评论(0) 编辑

2011年8月14日

使用Fiddler2录制HTTP操作脚本

摘要: Fiddler本身是用来做web debugging的工具。其具体的介绍和更多的使用方法请参考知识库中以下文章: Fiddler—Web调试代理工具 在线调试JavaScript和CSS 本文将详细介绍如何通过fiddler2录制http操作请求的脚本。 为了只保留操作过程中的关键请求数据,我们需要自定义fiddler的过滤项。 完整的录制步骤如下: 打开fiddler2,此时后台会启动一个代理服务器。此后所有的http请求都会经过此代理服务器进行请求转发。 配置fiddler2过滤项。 1:首先需要只保留fiddler对浏览器请求的捕捉。点击左下角处的”All processes”变成”We阅读全文

posted @ 2011-08-14 01:45 LT 阅读(73) 评论(0) 编辑

2011年7月25日

Subversion for Windows 安装配置

摘要: 下载地址:http://subversion.tigris.org/,进入该页面后点击左边的Downloads链接,如果没有的话,可以项目移动了托管网站了 下载:Win32 packages built against Apache 2.0 (建议最好下载该版本,为了后面配置的兼容性),选择svn-1.4.4-setup.exe,该文件是SubVersion的安装版本,当然你也可以选 择解压缩版本,解压缩版本不需要安装。 下载完毕后双击该文件进行安装,该安装过程与一般的软件安装没有任何区别,选择默认即可,一路Next,最后Finish。这样我们的SubVersion服务器端软件就安装完毕了。(阅读全文

posted @ 2011-07-25 22:30 LT 阅读(14) 评论(0) 编辑

Subversion for Windows 相关工具

摘要: http://sourceforge.net/projects/win32svn/files/Subversionhttp://tortoisesvn.net/downloads.html TortoiseSVN http://www.oksvn.com/Download/Detail-429.shtmlAnkhSvn阅读全文

posted @ 2011-07-25 18:06 LT 阅读(11) 评论(0) 编辑

2011年7月21日

【转载】DES加密算法源代码(C++类)

摘要: #ifndef _DES_ENCRYPT_DECRYPT #define _DES_ENCRYPT_DECRYPT #define BYTE unsigned char #define LPBYTE BYTE* #define LPCBYTE const BYTE* #define BOOL int class DES { public: BOOL CDesEnter(LPCBYTE in, LPBYTE out, int datalen, const BYTE key[8], BOOL type); BOOL CDesMac(LPCBYTE mac_data, LPBYTE mac_code阅读全文

posted @ 2011-07-21 01:25 LT 阅读(79) 评论(0) 编辑

2011年7月16日

wininet 异步 常见问题 error 1201 、12019

摘要: 1 、error 1201(没有实现异步方案)微软bug ,InternetReadFileExW 并没有实现异步方法需要使用 INTERNET_BUFFERSA 然后调用 InternetReadFileExA2、error 12019 不知道是否是bug,但我在处理1201后就把12019也视作bug方法:避免使用HttpSendRequestEx,改为使用HttpSendRequest。阅读全文

posted @ 2011-07-16 02:09 LT 阅读(51) 评论(0) 编辑

2011年7月12日

MSSQL2000,安装程序配置服务器失败解决办法

摘要: SQLServer2000重装.装到最后配制文件时.却跳出一个对话框"安装程序配置服务器失败。参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息。" 查了安装日志如下: ============================================= 12:26:15 Process Exit Code: (-1) 12:26:28 安装程序配置服务器失败。参考服务器错误日志和 C:\WINDOWS\sqlstp.log 了解更多信息。 12:26:28 Action CleanUpInstall: 12:26:28 C:\WINDOW阅读全文

posted @ 2011-07-12 17:10 LT 阅读(17) 评论(0) 编辑

导航

<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

公告

昵称:LT
园龄:5年9个月
粉丝:2
关注:1

搜索

 
 

常用链接

最新随笔

随笔分类(317)

随笔档案(251)

相册

友情链接

最新评论

阅读排行榜

评论排行榜

推荐排行榜

直角体Web动力