天道酬勤,自强不息 订阅
分类
内容读取中…
评论
内容读取中…
音乐
访客
内容读取中…
我的音乐
暂无内容。
信息安全站点
绿色兵团

中联绿盟信息技术公司成立于2000年3月,是国内专业从事网络安全服务的高科技企业,其前身为国内最著名的网络安全组织“绿色兵团”。网站内容涉及安全技术的方方面面,其绿盟月刊是质量很高的免费安全信息资源

COAST in Purdue

COAST小组是美国Purdue大学一个专门从事于网络安全的研究小组,他们的主页收集了全世界各地的安全资源,其Hotlist是全世界最全的安全链接资源之一

中国计算机安全

国家信息中心信息安全处的官方主页,提供安全杂志《网络安全》。这里有非常全面的安全法规的资源,包括国家法规、地方法规、中国信息安全技术标准以及信息技术安全标准目录

好友
内容读取中…
背景音乐
博文

经常在chinaunix灌水,用ruby的watir插件搞了个回帖机器人,不过要网速好点。找个代码只是个初级版本,具体的还需要细化。

说明:用这个程序在CU的清茶斋将《士兵突击》小说发表上去

不过实现是我得在清查发个帖子,给《士兵突击》开个头。

require 'watir'
#author:cucme
duanjigang1983@126.com 2008-06-21

#定义目的站点

aim_site = 'http://bbs.chinaunix.net/forumdisplay.php?fid=31'

13号线城铁,西直门站。

随着熙熙攘攘的人流挤进车厢,有很多人先冲进来来的人都抢到了座位,虽然我位置比较靠前,但我没去抢,因为我觉得在车门打开的一刹那冲进去,找到座位后把屁股狠狠的放在上面这一举动显得很不雅。

我站在靠门的一侧,琢磨着晚上回去吃什么。一阵悦耳的铃音响起,我这才注意到在我的右侧站着一位女孩子,人很漂亮,长长的头发如瀑布倾泻而下,一袭长群将她衬托的宛若人间仙子。
她接电话的时候笑的很甜蜜:老公,我在城铁上了。什么?你又加班啊?到几点啊?怎么也12点啊?太晚了,你在单位下面的饭店吃点吧,别吃太油腻的东西,还有,天太热,别吃辣的,容易上火。少抽点烟,晚上你打车回来吧?提前给我打个电话,我到小区门口接你。恩,恩,我随便吃点就行,好,好,88。

多么体贴的妻子啊,不禁艳羡。

到知春路时,她的电话又响了,她又接起电话:老公怎么啦?回来吃啊?不是要加班吗?哦,那太好了,你想吃点什么?我回去就去买菜,没事,不麻烦,我去咱家楼下的超市,家里

这就是生活,当你在追求自己理想的时候,任凭别人怎么干扰你,任凭在别人眼里你是如此的怪异不不解,自己也会在内心倔强的坚持着,不管对或者错!我不需要理解,也不想去解释!

虽然希望和前途如此迷茫,还是要抓住梦魇里闪过的那一丝希望,不能放弃!

周围的人似乎都在潇洒的活着,而唯独我忙忙碌碌的不知一天做些什么,这就是我的生活!

唯独令人欣喜的事情是:从昨晚研究到今天下午的flex终于突破了,偶用一天时间从零开始学习flex,action script,并且做出来了需要的flash,虽然很累,感觉很值得。

诅咒某些人死掉!!! (2008-06-10 17:53)

忽然心情不好,想要忘记一切,却忽然记起,顿时心里开始诅咒某些人死掉,从这个世界上消失!!!!

下贱的灵魂没有存在的意义,还不如将它赋予给一条狗!!!

虚拟机的无耻特性使得我安装vmware6屡屡不成功,结果就以为是中了毒,或许真的中了毒,然后打开卡巴斯基进行杀毒,睡梦中听着卡巴斯基机警的叫声,我感觉很甜蜜,虽然我肚子很疼,因为,每次鸣叫都意味着一个可恶的病毒被干掉了,早上6点40分闹钟就响了,我赶紧爬起来打开电脑看看我的爱机是否恢复正常,按下电源键,还没进入系统时,却蓝屏了!!!!

     我恍然大悟,罪魁祸首又是卡巴斯基,把系统杀坏了,于是没吃早饭,赶奔公司取我的盘包,去中关村的太平洋买了XP的安装盘,居然是SP3的补丁,还自带windows medialplayer11播放器,着实不错。

回家安装系统很快,做了ghost镜像,刚才又把我的php,apache,mysql重新装好了,可是cmedb拷贝到mysql的data目录下却不能用,看样子我得去从虚拟机中倒出来表了,并且得自己构造数据。

虽然重装了,我却能重温安装并调试成功php开发环境的小小欣慰之处,并在此备份,与linux下的手册形成双剑合璧^_^.

少废话,开工。

操作系统:windowsXP 番茄花园版,sp1,sp2,sp3补丁

软件包: apache_2.2.4-win32-x86-no_ssl.msi, mysql-5.0.27-win32.zip,

 

6月2号新的问题 (2008-06-02 23:17)
问题1:对于server维护的client_list来说,每次新来一个客户端的连接,都要从列表中找一个未初始化的节点,供这个客户端使用,一旦某个客户端终端连接或者通讯出错,就需要把这个节点复位,最终成为INVALID_HOST,这样子这个节点才能被下次新来的连接请求重用。但是在我的代码中,却忘记了这一点,一旦某个连接关闭,只关闭了socket描述符,而未修改valid标志位。 当再次接受到一个新的连接时就会跳过这个已经关闭的连接节点。占用彼得资源。另外,接收数据时,也会错误返回,因为这个节点的套接字已经被设置为INVALID_SOCK_FD了,之所以出现这个问题,就是在连接出错时没有复位valid标志位 在每个连接出错处理的尾部加上一句修改valid标志位的语句,一旦连接关闭,就修改valid标志位为INVALID_HOST 问题2:明早再说······
5月30日修改 (2008-05-31 08:18)

修改工程:CME_ROUTER

类:CListenner和CServer

功能:

CListenner:

1):在原来程序中,配置文件cme_router.conf中指定了监听端口,跟server.conf中有重复,将这项去掉

2):原来的程序中初始化是获取到本机IP地址列表,直接取出第一个IP地址,监听这个IP上的端口,这里存在一个缺陷,因为监听的IP地址和端口是在server.conf中指定的,而程序实际监听于上的IP地址却是获取到的第一个地址,如果遇到这样的情况就会出错,机器接了两个网卡,其中一块网卡没有接入网络,也没有配置IP地址,所以返回的IP地址列表中,有个为0.0.0.0,如果这个IP正好位于第一个位置上,则cme_router会监听0.0.0.0,而不是第二个有效的IP地址。正确的做法应该是:获取所有的IP地址,然后跟server.conf中的IP地址进行比对,如果有一个相同的,则认为是本机要监听的IP地址,也作为本机的IP地址存储起来,如果没有找到匹配的IP,则提示配置文件server.conf中没有配置本机的IP,退出程序。

如果本机没有接入网络,则在IP地址列表的第一个位置填充127.0.0.1地址,进行监听,为本机进程通讯做服务。

3):CServer部分修改

主要是接收到的消息解

5月28日修改与问题 (2008-05-29 08:17)

昨天测试时发现发送数据的程序有时会出现“初始化输出共享内存错误”,最后查找了半天,发现是在根据环境变量CME_HOME和CONFIG_DIR以及SERVERF_ILE构造文件路径时出了错,导致最终的文件名为

/cme/而不是/cme/config/server.conf,从而初始化内存出错,经过修改,解决了file_name函数中的问题。

另外在快速发送数据时发现有时候会出现数据错位,出现“未知消息类型”初步判断是由于握手消息没有完全写入,从而后面的数据包补充了握手消息的偏移,导致整个传送过程错位。

目前能解决的办法就是发送握手消息时,如果不能完全发送,就进行数据缓存,再发送,不过这个就牵扯到为每个主机定义一个临时缓存的问题,尚待商榷!!!!

在第一个实现的版本中,cme_router所有要发往别的主机的数据都存储在一个单独共享内存中,这个共享内存的标识符为cucme,当cme_router工作时,会循环读取输出共享内存段,每读到一个数据记录,便会根据这个记录的目的IP,在CME_ROUTER的主机列表中查找对应IP的主机,如果找到相等的IP主机,则将数据发送给该主机,否则的话,就把数据丢掉,这样,就会出现这样的情况,如果接收主机上的程序在发送主机程序运行的前一段时间还未启动,而发送程序在每写入一个数据条后都能及时的读出该数据,但是发送时却会因为该主机不在线而丢弃该条记录,这样就会使得数据包丢失,影响功能,一开始想到如果主机不在线,能不能先把数据回填到内存中,以后还能读书来,但是又发现这样是不合理的,原因如下:

1):首先,虽然CME_ROUTER的每个数据包都是独立的,也就是说后收到的数据并不一定就是因为他被写入内存的时间晚于前一条,但是在实际中,往往是这样的情况,因为写内存是顺序的,读也是顺序的,大多数情况下读出来的数据都是流式的,为了保证数据的大体顺序是先进先出式的,还是不要回填的好,虽然CME_ROUTER实际功能是提供了一个数据报格式的通讯。

2):其次,会造成循

class Song
 def  initialize(name, author)#相当于C++中的构造函数constructor,在Song.new时被调用。
   @name name; #instance变量
   @author author;
 end
 def  get_name()
   return 'song:#@name'
 end
 def  get_author()
   return 'song:#@author'
 end
 def  to_s
   'name = #@name, author = #@author'
 end
 def to_t
   'song: #@name, song:#@author'
 end
end
class SubSong < Song #<指明了继承关系,简单明了
 def  initialize(name, author, length)
   super(name, author) #调用基类或者超类的构造函数
   @length=length
 end
 def  to_s
   
CME开发过程跟踪 (2008-05-28 21:51)

cme_router,cme_server,cme_thread开发已经好长时间了

期间发现了不少问题,cme_router又在上周进行了重新开发,为了记住自己对每个程序的理解和改进过程

所以创建这个板块来记录一切问题的发现和解决过程。

=============================================

2008年5月25日:

cme_router重新实现和设计,原因是,以前输出共享内存使用一个单独的内存块,标识符为cucme,所有输出消息都写到这个共享内存中,而cme_router发送到网络上的数据包则是从这个输出共享内存读取的,每次顺序读取一条记录,但是并不知道这个数据包的目的IP是那个主机,当cme_router取出数据包后,会遍历服务器列表,查找与消息目的地IP相同的主机,如果找到则发送,如果找不到,则丢弃数据包。

直到上周,我才发现这个问题,如果这样的话,很多主机的数据包就会被丢弃,共享内存就起不到缓冲的作用了。

为了解决此问题,将共享内存的分类重新设计了一下。

对于每台主机上的输入共享内存,按照消息类型建立共享内存列表,消息类型作为共享内存的索引。之所以这么根据消息类型设计输入共享内存,是为了高效读取,防止误读从而丢掉数据包。

新浪BLOG意见反馈留言板 不良信息反馈 电话:95105670 提示音后按2键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有