Bin's profile蜉蝣之冢PhotosBlogListsMore Tools Help
Photo 1 of 2

Bin Wu

Location
Interests

蜉蝣之冢

为了遗忘的记录
February 17

house for rent

华锈路255弄

整套2500块.
08年底的新房源,刚装修结束.
  • 户    型:两室一厅一厨一卫一阳台 租赁方式:整租

  • 楼    层:第4层/共6层 朝    向:

  • 使用面积:75平方米 建筑面积:不详

  • 装修程度:中等装修
  • 交通状况:583 638 730 734 785 789 792 795 815 790 793 地铁6号线高科西路站
  • 小区附近设施配套齐全,比邻申东医院,乐购、农工商等大卖场及建设中的巴黎春天。交通便利,南侧为北艾路,东侧为锦绣路,西侧为杨高南路,北侧为高科西路,出门就有数条公交路线,紧靠即将通车的地铁6号线(步行5~10分钟)。
  • 房子的外面.房间在4楼和5楼.2套.下面是4楼的.

    这个是大门...

    冰箱..

    厨房

    浴室..

    还是浴室

    小房间

    阳台,还没打扫过...

    朝南的 大房间..

    朝南的 大房间..

    朝南的 大房间..家里的大床.
     

    February 01

    会唱歌的小鸟...

     
    January 18

    动画片里的场面

     

    1月17日,在加沙地带北部拜特拉希耶一所联合国为当地开办的学校,巴勒斯坦平民和医务人员躲避以色列军队的袭击。

    有说是白磷弹的,不过不是专用白磷炸弹,是白磷发烟弹 被以军当成燃烧弹用.

    January 06

    转:C#和C++结构体Socket通信

    转:  C#和C++结构体Socket通信

    最近在用C#做一个项目的时候,Socket发送消息的时候遇到了服务端需要接收C++结构体的二进制数据流,这个时候就需要用C#仿照C++的结构体做出一个结构来,然后将其转换成二进制流进行发送,之后将响应消息的二进制数据流转换成C#结构。

    1、仿照C++结构体写出C#的结构来

    Code
     1using System.Runtime.InteropServices;
     2
     3    [Serializable] // 指示可序列化
     4    [StructLayout(LayoutKind.Sequential, Pack = 1)] // 按1字节对齐
     5    public struct Operator
     6
     7{
     8         public ushort id;
     9        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)] // 声明一个字符数组,大小为11
    10        public char[] name;
    11        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)]
    12        public char[] pass;
    13
    14         public Operator(string user, string pass) // 初始化
    15         {
    16            this.id = 10000;
    17            this.name = user.PadRight(11'\0').ToCharArray();
    18            this.pass = pass.PadRight(9'\0').ToCharArray();
    19        }

    20    }

    21
    22

     

        2、注意C#与C++数据类型的对应关系

    C++与C#的数据类型对应关系表
    API数据类型 类型描述 C#类型 API数据类型 类型描述 C#类型
    WORD 16位无符号整数 ushort CHAR 字符 char
    LONG 32位无符号整数 int DWORDLONG 64位长整数 long
    DWORD 32位无符号整数 uint HDC 设备描述表句柄 int
    HANDLE 句柄,32位整数 int HGDIOBJ GDI对象句柄 int
    UINT 32位无符号整数 uint HINSTANCE 实例句柄 int
    BOOL 32位布尔型整数 bool HWM 窗口句柄 int
    LPSTR 指向字符的32位指针 string HPARAM 32位消息参数 int
    LPCSTR 指向常字符的32位指针 String LPARAM 32位消息参数 int
    BYTE 字节 byte WPARAM 32位消息参数 int

    整个结构的字节数是22bytes。

    对应的C++结构体是:

     

    Code
    1typedef struct
    2{
    3     WORD id;            
    4    CHAR name[11];
    5    CHAR password[9];
    6}
    Operator;
    7
    8

    3、发送的时候先要把结构转换成字节数组

           

    Code
     1 using System.Runtime.InteropServices;     
     2
     3         /// <summary>
     4        /// 将结构转换为字节数组
     5        /// </summary>
     6        /// <param name="obj">结构对象</param>
     7        /// <returns>字节数组</returns>

     8        public byte[] StructToBytes(object obj)
     9        {
    10            //得到结构体的大小
    11            int size = Marshal.SizeOf(obj);
    12            //创建byte数组
    13            byte[] bytes = new byte[size];
    14            //分配结构体大小的内存空间
    15            IntPtr structPtr = Marshal.AllocHGlobal(size);
    16            //将结构体拷到分配好的内存空间
    17            Marshal.StructureToPtr(obj, structPtr, false);
    18            //从内存空间拷到byte数组
    19            Marshal.Copy(structPtr, bytes, 0, size);
    20            //释放内存空间
    21            Marshal.FreeHGlobal(structPtr);
    22            //返回byte数组
    23            return bytes;
    24
    25       }

    26
    27

    接收的时候需要把字节数组转换成结构

           

    Code
     1/// <summary>
     2        /// byte数组转结构
     3        /// </summary>
     4        /// <param name="bytes">byte数组</param>
     5        /// <param name="type">结构类型</param>
     6        /// <returns>转换后的结构</returns>

     7        public object BytesToStruct(byte[] bytes, Type type)
     8       {
     9            //得到结构的大小
    10            int size = Marshal.SizeOf(type);
    11            Log(size.ToString(), 1);
    12            //byte数组长度小于结构的大小
    13            if (size > bytes.Length)
    14            {
    15                //返回空
    16                return null;
    17            }

    18            //分配结构大小的内存空间
    19            IntPtr structPtr = Marshal.AllocHGlobal(size);
    20            //将byte数组拷到分配好的内存空间
    21            Marshal.Copy(bytes, 0, structPtr, size);
    22            //将内存空间转换为目标结构
    23            object obj = Marshal.PtrToStructure(structPtr, type);
    24            //释放内存空间
    25            Marshal.FreeHGlobal(structPtr);
    26            //返回结构
    27            return obj;
    28        }

    29

    4、实际操作:

    Code
     1using System.Collections;
     2using System.Collections.Generic;
     3using System.Net;
     4using System.Net.Sockets;
     5
     6byte[] Message = StructToBytes(new Operator("user","pass")); // 将结构转换成字节数组
     7
     8TcpClient socket = new TcpClient();
     9
    10socket.Connect(ip,port);
    11
    12NetworkStream ns = Socket.GetStream();
    13
    14ns.Write(Message,0,Message.Length); // 发送
    15
    16byte[] Recv = new byte[1024]; // 缓冲
    17
    18int NumberOfRecv = 0;
    19
    20IList<byte> newRecv = new List<byte>();
    21ns.ReadTimeout = 3000;
    22try
    23{
    24do
    25{
    26// 接收响应
    27NumberOfRecv = ns.Read(Recv, 0, Recv.Length);
    28for (int i = 0; i < NumberOfRecv; i++)
    29newRecv.Add(Recv[i]);
    30}

    31while (ns.DataAvailable);
    32byte[] resultRecv = new byte[newRecv.Count];
    33newRecv.CopyTo(resultRecv, 0);
    34
    35Operator MyOper = new Operator();
    36
    37MyOper = (Operator)BytesToStruct(resultRecv, MyOper.GetType()); // 将字节数组转换成结构

    38

    在这里取值的时候可能会出现只能取到一个字段,剩余的取不到的问题,怎么回事我也搞不懂,反正我的解决办法就是按照字节的顺序从resultRecv里分别取出对应的字段的字节数组,然后解码,例如:

    Operator.name是11个字节,最后一位是0,Operator.id是2个字节,那么从第3位到第12位的字节就是Operator.name的内容,取出另存为一个数组MyOperName,Encoding.Default.GetString(MyOperName)就是MyOper.name的内容。

     

    Code
    1socket.Close();
    2
    3ns.Close();
    4
    以上是从别处转过来的,方便自己看看.特此注明!

    December 26

    美3500亿救命钱去向不明 疑被华尔街高管私吞

    我头戴博士帽
    我身穿阿玛尼
    谁也不知道
    我有多少秘密
    我是一个金融家
    金融家
    我有许多小秘密
    小秘密

     
    December 12

    国之将亡,必有妖孽

    国之将亡,必有妖孽.
    妖孽之甚,若秋叶.
    昔一白丁,始从安保,痴游戏,遂三荐于国,冀国策,诺!
    随诸策议,寐,君温而不怒,若才之性,惹诸策.遂策之议,癫者癫,寐者寐,莫不现才之性,君大乐.
    才之将帅者,于国出.君顿悟,无奈癫者当道,求良方,白丁谏曰妖孽不除何以正国.诺!遂逐其去.
     
     
    June 02

    儿童节

    收到一个礼物,我姐姐给我儿子的.不过早上让他玩了玩,似乎对这个东西不感冒.好象还是太小了.连玩都不会.
    May 25

    ibatis与MYSQL问题解决记录

    软件环境:
    中文WINDOWS XP

    MyEclipse 5.1.0 GA
    Apache Tomcat 5.5.20
    MySQL 5.0.27

    新项目用IBATIS+spring +struts数据库用MYSQL
    IBATIS问题:
    SQLMAPCONFIG不能正确加载:检查之后发现是相对路径问题。
    接着又发现SQLMAP解析出错:
    1,DTD被我删掉了(之前因为路径问题,手动改了很多东西)
    2,在正确添加DTD以后还是不能正常解析,访国外BBS,发现是命名空间被我禁用造成。(我是用ECLIPSE查件ABATOR自动生成的)
    至此问题解决。暂时只测试了一个表。
    下面问题又来了,中文问题
    我是UTF-8的JSP页面+FILTER请求UTF-8,在插入数据库以后,中文是??。
    MYSQL我是第一次用。GOOGLE一把,发现在MY.INI里,也要设一下,不过没用。。。。
    最后一高人大哥的BLOG里找到答案,在连接URL最后加上?characterEncoding=utf-8
    一下给出那位大哥的文章连接
    http://netbeyond.blog.hexun.com/12666107_d.html
    May 10

    被MS郁闷了两天.这个问题很妖异

    我本来做了2个下拉框,一个省,一个城市,用Icallbackeventhandler接口来实现所谓的AJAX效果.郁闷从此开始,回调不执行了.我开始用ALERT查JS代码,无果.接着看后台代码,那几行也没什么问题,在PAGEONLOAD里只有2段代码,一段是注册JS,一段是填充省份下拉框,我把填充那段注释掉,再运行一次,结果奇迹般的正常了,我开始怀疑是不是代码冲突.试了几个位置,只要是执行了填充的,就不能正常回调了.
    以下是我的代码:
    protected void Page_Load(object sender, EventArgs e)
        {
            initSelect();
            ClientScriptManager cm = Page.ClientScript;
            String cbReference = cm.GetCallbackEventReference(this, "args",
                "GetData", "", false);
            String callbackScript = @"function CallServer(args,context) {
               args=select('"+this.DropDownList2.ClientID+"',context);" +
                cbReference + ";}";
            cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
           
        }
        private void initSelect()
        {
            Bo.ProvinceBo pbo = new Bo.ProvinceBo();
            this.DropDownList2.DataSource = pbo.GetAll();
            this.DropDownList2.DataTextField = "prov";
            this.DropDownList2.DataValueField = "prov";
            this.DropDownList2.DataBind();
        }
    然后开始分段测试initSelect()里面的语句发现,只要把DataValueField 等于ID列,就可以正常执行.prov列是中文,ID列是数字,只有这2个区别.
    现在问题找到了.中文......网上搜了一下,也有一位大哥碰到过这样的问题,他讲的比较全面.
    April 15

    史前一万年

    开始:
    男主角倒在地上,他面前是一只剑齿虎,它看了看他,就走了,
    迷之声:"我们有自己的预言,能和剑齿虎沟通的人,会带领我们"
    这个时候,镜头很严肃的转向一块石头,上面的涂鸦,就是之前的场景.
    看到这里,我笑了,整个放映厅都笑了.我想起了陈凯歌,想起了满神,想起了馒头.....
     
    结尾:
    男主角带领众人干倒了法老,可是就在女主角满心欢喜的跑向男主角的时候,她中箭了......
    男主角悲痛欲绝,奔到了长齿象面前,挑逗它,可是,这次的男主角不是金城武,长齿象也不是刘德华.......
    它没有和他对决,走了......
    男主角若有所悟,奔回女主角身边.
    迷之声:"老妈妈用最后一口气,就了她!"
    女主角倒吸了一口凉气,醒了,他们拥抱,他们欢呼......
    她就是  张子仪.....(对不起,我现在才发现,不知道她的名字具体怎么写,如果写错了,请原谅.)