魔兽对战JAVA联机程序
Nov 20th, 2009 by song

warpuber暂时是一个局域内网的魔兽对战平台,理论上也可以用来做cs联机,但是现在魔兽方面也没有做完。在学校,楼与楼之间魔兽不能自动连机,这是由于魔兽的搜索只能在当前网段.255.255.255.255广播.用魔兽搜索器能够联机。但是那个搜索器缺少一个服务列表,只能靠自己不停的刷新才能看到主机,也看不到延迟,联机时不能退出搜索器。 warpuber是用不同的原理制作的一个“高级搜索器”,自动更新主机信息。谁建主了自动就显示出来了,不需要刷新。自带一个聊天群,喊人更容易。可靠的延迟数据,防止卡卡卡卡

最新更新.加入了ip广播功能.主机可以加入一些ip段,选择广播.可以让这些网段的人不使用任何搜索器就能看到你的主机!

更新

当前版本

1.1

严重错误 9.27日的版本有一个严重错误.会导致无法聊天! 现已纠正!9.28 请下载9.27的同学重新下载

更新说明: 支持私聊(不完善!) 添加提示声音,有人建立主机的时候有提示音,主机人满的时候有提示. 添加修改游戏名称的功能,在游戏选择主机的时候能知道那个主机的楼,和名字.也可以自己添加文字 代码基本上重新改写了. 源码更新较大

安装运行说明

别说废话,我只要能运行: ok 请下载完整客户端 1,运行 java6.exe 安装完毕; 2,运行 warpuber.jar 输入个名字,登陆完事

详细说明:

如果你安装了java运行环境jre 1.5以上版本,那么可以直接下载精简客户端。下载后运行即可。注:学校神州数码查上网记录的时候需要安装的一个jre就是1.5版本的。安装了它就能运行warpuber了。 warpuber.jar是可执行jar文件,java特有的 warpuber.exe是用免费的java2exe封装的。 这两个都可以执行。完整版安装完之后,那个最大的文件java6.exe就没有用了,直接删掉都可以。除非你重装系统了,就得重新安装。

xml文件夹放的是个人的配置信息,比方说个人登陆时候的名字,版本,和将来要放的ip信息。 icon文件夹下放的是warPuber的图标

1.1新加入au文件夹.里面放的是sun的au格式的音乐文件,就是我所说的提示音.觉得不好听可以自己替换掉…

注意

关闭warpuber的时候不会退出,会最小化到系统托盘。 退出要在最小化的图标上点鼠标右键。如果运行多个warpuber.会出现多个图标。warpuber会出现这样一行字Address already in use: Cannot bind;并且无法获取在线列表。 全部退出就可以了。

这个程序不是目前所用的魔兽搜索器.他的原理是完全不同的.这个程序不会搜索游戏.需要主机和客户机同时开才能有用,这个就是对战平台,不是搜索器!

#开发说明

这是本人自创的方法,软件原理很简单。每个懂编程的人都能做出来。详细信息见我的csdn博客http://blog.csdn.net /xinrui5577/archive/2009/09/16/4560590.aspx (这里不是打广告,确实那个博客写的文章看起来舒服)

主要UDP包:

收索包:

内容:F7 2F 10 00 50 58 33 57 15 00 00 00 00 00 00 00 功能:向主机提出收索信息。问别人“你建什么主机?” 在打开魔兽进入局域网的时候,会向当前网段(255.255.255.255)广播这个包。只要条件符合,收到这个包的主机都会返回一个地图信息给他(他:这个收索包的IP端口)

主机包:

内容:F7 32 10 00 00 00 00 00 01 00 00 00 00 00 00 00 功能:告诉别人:“我建主机了,要不要看看。” 建立主机的时候开始,向当前网段广播这个包,每5秒钟一次。收到这包的客户机会发送搜索包。

地图包:

内容: F7 30 8C 00 50 58 33 57 14 00 00 00 01 00 00 00 39 69 C2 00 E5 BD 93 E5 9C B0 E5 B1 80 E5 9F 9F E7 BD 91 E5 86 85 E7 9A 84 E6 B8 B8 E6 88 8F 20 28 76 73 00 00 01 03 49 07 01 01 77 01 B9 79 01 99 D5 B9 31 4D CB 61 71 73 5D 45 6F 77 19 6F 6D 6F 61 65 5D 45 2B 6F 75 41 21 41 6D 6D 2B 73 75 61 73 73 21 77 B1 37 2F 37 31 63 2F 77 23 33 79 01 77 73 01 01 00 0A 00 00 00 01 00 00 00 01 00 00 00 0A 00 00 00 1B 00 00 00 E0 17 功能:“这就是我所建的图,你好好看。” 主机收到搜索包之后就把这个包返回给他,包括所有有用信息。

魔兽的工作流程

魔兽进入局域网的时候会广播一个搜索包,只发送一次。只发送当前网段(255.255.255.255),所以我们的魔兽只能看到本寝室,或者少数几个寝室的几个主机。

建立了了主机的魔兽收到之后就会发送一个包给他,这个包就是地图信息,包括地图信息,主机名,加入了多少人,剩下多少位置,还有一个重要的数据就是游戏的端口。一般魔兽的端口是6112.

建立主机的魔兽会向本地发送一个包,“我建立主机了”

搜到这条消息的魔兽会发送一个搜索包给主机。

主机就发送 地图信息。

收到之后就解析地图,这时候大家就看到了有人建主了

点击加入· ~ 建立tcp连接 一直到推出主机的游戏
ps: 一场游戏下来,和主机发送的包 大概25MB(半小时) 主机收发的包就是 9*25 MB/30 min ;//按照dota计算一个主+9个客户端的10人游戏。 这样粗略的估计主机的网速要求就是 9*25*1024/30*60=128>100 kb/s 加上一点点别的程序所要的通讯包。要想不卡,主机的网速需要保证这个数吧。

官方地址 : http://code.google.com/p/warpuber

昨天安装go语言还是失败
Nov 20th, 2009 by song



昨天去 golang.org 安装go语言..
环境是
系统版本: Mac OS X 10.6.2 (10C540)
Kernel 版本: Darwin 10.2.0
启动宗卷: MAC SNOW LEOPARD
启动模式: 正常
电脑名称: “song”的“MacBook Pro”
用户名称: song (song)
安全虚拟内存: 已启用
64 位内核和功能扩展: 是
启动后的时间长度: 2:08

设置 ~/.profile
export GOROOT=$HOME/Go
export GOOS=darwin
export GOARCH=amd64
export GOBIN=$HOME/bin
export PATH=$GOBIN:$PATH

安装还是出现 http test失败
fetch http://www.google.com/robots.txt

以为是gfw的问题.. 通过tor翻墙过去执行还是失败.. 继续等待.. 但是firefox能访问这个地址阿..
很是不解

VMware Fusion 3.0 注册机
Nov 19th, 2009 by song

Mac下 用 VMWare Fusion 注册机程序
[file][attach]1[/attach][/file]

freebsd 有惊无险
May 20th, 2009 by song

安装mencoder的时候
说 /lib/libc.so.7版本不一样
mv /lib/libc.so.7 /lib/libc.so.7.bak
索性就用另外一个替换 刚替换就完蛋
执行任何命令出现
/libexec/ld-elf.so.1: Shared object “libc.so.7″ not found,required by

搞了半天
啥都用了 启动盘Ubuntu
Freebsd启动盘
google baidu 啥都用上没辙

最后在freebsdchina上找到一个和我一样的搬石头砸自己脚的家伙

delphij 的一个建议 /rescue/mv /lib/libc.so.7.bak /lib/libc.so.7
搞定 冷汗一身啊

写了个分页类代替 django的分页类 采用推进法无需count总数
May 14th, 2009 by song

其优势就是无需 count 以下总记录数

直接采用推进形式在百万记录及高负载有一定作用
但是只能上下推进 没更多页选择

paginator.py
[code]class InvalidPage(Exception):
   pass

class PageNotAnInteger(InvalidPage):
   pass

class EmptyPage(InvalidPage):
   pass
class Paginator(object):
   def __init__(self,object_list,per_page):
       self.object_list = object_list
       self.per_page = per_page
   def page(self,number=1):
       self.cur_pages = number
       if self.cur_pages < 1 :
           number = 1
       number = (int(number)-1)*int(self.per_page)
       max = int(number)+int(self.per_page)+1
       data = self.object_list[number:max]
       num = data.__len__()
       data = data._result_cache
       # if next
       if num > int(self.per_page):
           data = data[0:-1]
           nextpage = abs((int(number)+int(self.per_page))/int(self.per_page))+1
       else:
           nextpage = None
       # if prev
       if int(number) > 0:
           if int(number) < int(self.per_page):
               prevpage = 0
           else:
               prevpage = abs(int(int(number)-int(self.per_page))/int(self.per_page))+1
       else:
           prevpage = None
       return Page(data,nextpage,prevpage,self)
   def _get_num_pages(self):
       return self.cur_pages
   num_pages = property(_get_num_pages)
   def _get_num_per_page(self):
       return self.per_page
   per_pages = property(_get_num_per_page)
class Page(object):
   def __init__(self,object_list,next_page,prev_page,paginator):
       self.object_list = object_list
       self.next_number = next_page
       self.previous_number = prev_page
       self.paginator = paginator
   def has_next(self):
       if self.next_number is None:
           return False
       else:
           return True
   def has_previous(self):
       if self.previous_number is None:
           return False
       else:
           return True
   def next_page_number(self):
       return self.next_number

   def previous_page_number(self):
       return self.previous_number
[/code]

mysql 中使用 TIMESTAMP 然后用FROM_UNIXTIME UNIX_TIMESTAMP 互换
Apr 26th, 2009 by song

FROM_UNIXTIME
UNIX_TIMESTAMP

今天编译tokyo Cabinet 出现错误/usr/lib/crt1.o(.text+0×81): In function `_start':
Apr 9th, 2009 by song

/usr/lib/crt1.o(.text+0×81): In function `_start’:

#wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.14.tar.gz
#tar -xzvf tokyocabinet-1.4.14.tar.gz
# cd tokyocabinet-1.4.14
# ./configure

# make 出错(/usr/lib/crt1.o(.text+0×81): In function `_start’:) 改用虾米 gmake 安装完毕
# gmake
# make install

php_imagick.dll for php 5.2.8 win ext
Feb 24th, 2009 by song

测试了下  php_imagick 的一些功能希望能对你有用
[code]<?php
//define('PATH',dirname(__FILE__));
//$srcIMG = PATH.'/src.png';
////$srcIMG3 = PATH.'/039.jpg';
////$srcIMG4 = PATH.'/041.jpg';
////$srcIMG = PATH.'/SI851275.JPG';
//$newIMG = PATH.'/newImage.png';
//$img = new Imagick($srcIMG);
////$img->writeImage($newIMG);exit;
//////$img->charcoalImage(1,0.1); // 木炭效果 不错
//////$img->chopImage(100,100,100,100); // 模糊效果 不错
//////$img->commentImage('hello World'); // 添加图片评论
//////echo $img->getImageProperty('comment'); // 读取图片属性
//////$img->cropImage(200,100,200,200); //裁减图片 很有用
//////$img->cropThumbnailImage(1000,1000); // 缩放后居中裁减
//////$img->despeckleImage(); // 去除一些杂点
////
/////* 在上面写字
////$string = 'hello World';
////$draw = new ImagickDraw();
////$draw->setFillColor(new ImagickPixel('blue'));
////$draw->setFontSize(28);
////$metrix = $img->queryFontMetrics($draw, $string);
////$draw->annotation(25,125,$string);
////$img->drawImage($draw);
////*/
////
//////$img->edgeImage(0); // 高亮边缘?
////
//////$img->embossImage(0,0.1 ); // 感觉好像加入光照效果
////
//////$img->enhanceImage(); // 提高图片品质
////
//////$img->equalizeImage(); // 好像增加对比及光照把
////
//////$img->flipImage(); // 垂直翻转把!
////
//////$img->flopImage(); // 水平翻转把!
////
//////$img->frameImage(new ImagickPixel('green'),15,15,2,2);
////
/////* 去色
////$clone = $img->clone();  
////$clone = $img->fximage('p{0,0}');  
////$img->compositeImage($clone,imagick::COMPOSITE_DIFFERENCE,0,0);
////$img->modulateImage(100, 0 , 0); // 加个3d边框
////*/
////
//////$img->gammaImage(10); // gamma 校正
////
//////$img->gaussianBlurImage(1,1); // 高斯模糊图像
////
//////$img->getCompression(); // 压缩图像?
////
//////$img->getCompressionQuality(); // 压缩图像?
////
//////echo $img->getCopyright(); // 获得版权 Copyright (C) 1999-2007 ImageMagick Studio LLC
////
//////$img->oilPaintImage(3); // 油画效果
//////$img->adaptiveResizeImage(300,300);
//$img->setImageFormat('png');
////$bg = new ImagickDraw();
////$imgs = array($srcIMG2,$srcIMG3,$srcIMG4);
////$img2 = new Imagick($imgs);
////foreach ($img2 as $i){
////$i->thumbnailImage(100,null);
////$i->setImageBackgroundColor( new ImagickPixel( "black" ) );  
/////* Use a random angle */  
////$angle = mt_rand( 1, 45 );
////if ( mt_rand( 1, 2 ) % 2 === 0 ){      
////    $angle = $angle * -1;  
////}
////$i->polaroidImage( $bg, $angle );
////$img->compositeImage( $i, Imagick::COMPOSITE_OVER, mt_rand( 10, 350 ), mt_rand( 10, 350 ) );
////}
//////$img2->writeImage($newIMG);
////$img2->removeImage();
//
//
////#
////$draw = new ImagickDraw();
////#
////
////#
/////* Set the fill color to light blue */
////#
////$draw->setFillColor( new ImagickPixel( 'light blue' ) );
////#
////
////#
/////* Create the polaroid image */
////#
////$img->polaroidImage( $draw, 20 );
//
////$img->radialBlurImage(10); // 径向模糊
//
////$img->raiseImage(20,20,10,10,false); // 整个按钮
//
////$img->rotateImage(new ImagickPixel(), 270); // 旋转
////$img->scaleImage(300,300,true); // 感觉像缩放
//
////$img->sepiaToneImage(70); // 深褐色调节?
//
////$img->setCompression(imagick::COMPRESSION_ZIP);
////// a value between 1 and 100, 1 = high compression, 100 low compression
////$img->setCompressionQuality(100);
//
////$img->setImageBias(90); // 不懂
//
////$img->setImageColorspace(3);
//
//
////$img->setImageGamma  (10); // 设置gamma效果
////$img->setImageOpacity  (0.8); // 设置图像透明
//
////$img->thumbnailImage(500, 0);
////$img->setInterlaceScheme(Imagick::INTERLACE_PLANE);
////$img->charcoalImage(1,0.1);
////$img->sketchImage(10,0.1,5); // 听说素描效果
//
////$img->solarizeImage(100); // 曝光°
//
////$img->spliceImage(100,100,10,10);
////$img->spreadImage(5);
////$img->swirlImage(30); // 旋转扭曲图像
//
////$new_image = $img->transformImage( "500x600", "500x500" );
////$new_image ->writeImage($newIMG);
//
////$img->transposeImage(); // 逆时针旋转 90°
//
////$img->transverseImage(); // 顺时针旋转 90°
//
////$img->vignetteImage(1,1,10,50); // 圆切?
//
////$img->waveImage(10,10); // 浪折
//
//$img->whiteThresholdImage('grey');
//$img->writeImage($newIMG);
//$img->clear();
//$img->destroy();
?>[/code]


附上 最新编译的: PHP 5.2.8 的 php_imagick.dll  下载后放入 ext 目录下 并在 php.ini加入这个扩展
例如:

[code]extension=php_imagick.dll[/code]


[file]attachment/1235449948_0.rar[/file]

'HCRYPTPROV' : undeclared identifier 错误解决
Feb 23rd, 2009 by song

编译错误

‘HCRYPTPROV’ : undeclared identifier

#include
在前面加上下面这句  
 #define   _WIN32_WINNT   0×0500

例如:
[code]#define   _WIN32_WINNT   0x0500
#include <wincrypt.h>[/code]

NIGNX 限制并发一例
Jan 9th, 2009 by song

本文摘抄自 http://wiki.codemongers.com/NginxChsHttpLimit_zoneModule?highlight=(limit)
limit_zone   limit  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn   limit  1;
}
limit_zone   limit  $binary_remote_addr  10m;
定义一个叫“limit”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。
您可以注意到了,在这里使用的是 $binary_remote_addr 而不是 $remote_addr。
$remote_addr 的长度为 7 至 15 bytes,会话信息的长度为 32 或 64 bytes。 而 $binary_remote_addr 的长度为 4 bytes,会话信息的长度为 32 bytes。
当区的大小为 1M 的时候,大约可以记录 32000 个会话信息(一个会话占用 32 bytes)。
limit_conn   limit  1;
指定一个会话最大的并发连接数。 当超过指定的最发并发连接数时,服务器将返回 “Service unavailable” (503)

SIDEBAR
»
S
I
D
E
B
A
R
«
»  Substance:WordPress   »