您的位置:程序门 -> delphi -> 网络通信/分布式开发



请高手帮我把下面的delphi代码转成vb代码,给出参考写法即可,谢谢!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请高手帮我把下面的delphi代码转成vb代码,给出参考写法即可,谢谢!
发表于:2008-01-17 17:41:24 楼主
关于vb   winsock通讯,请高手指导一下,若能给出原代码可以支付一点辛苦费,谢谢!
通讯协议下载地址:www.io89.com/a5.pdf
要求:能正确接收指纹数据即可
我的qq:6334164,   msn:netcityken@hotmail.com,   手机:13138890525

type
    tfpustru   =   packed   record//tcp/ip回送结构
      uno:   cardinal;//用户号码   4   byte
      uname:   array[1..10]   of   char;   //姓名     10   byte
      udepname:   array[1..10]   of   char;//   部门     10   byte
    end;

    tfpidentify   =   packed   record//指纹验证识别
        machinenumber:   byte;
        pin:   cardinal;
        imagesize:   cardinal;
    end;

    tfpresult=   packed   record//pc回送结果
        pin:   cardinal;
        uname:   array[1..20]   of   char;   //姓名     20   byte
        udepname:   array[1..20]   of   char;//   部门     20   byte
    end;


//udp收到“req”后立即回发“ok”,vb中使用winsock控件,能收到req,但发送ok没反应。udp   port=4371
procedure   tfrmmain.udpserverudpread(sender:   tobject;   adata:   tstream;
    abinding:   tidsockethandle);
var
    datastringstream:   tstringstream;
    s:   string;
begin
    datastringstream   :=   tstringstream.create('');
    try
        datastringstream.copyfrom(adata,   adata.size);
        if   datastringstream.datastring   =   'req'   then
        begin
            s   :=   'ok';
            abinding.sendto(abinding.peerip,   strtoint(g_udpport),   s[1],   length(s));   //关键是在这里不知道vb怎样发送,我用vb的winsock

控件发,但没有反应。
          end;
    finally
        datastringstream.free;
    end;
end;


procedure   tfrmmain.idtcpserverEXECute(athread:   tidpeerthread);
var
    //省去了变量声明
begin
      try
          try
            with   athread   do
            begin
                  //开始接收数据
                tempstream   :=   tmemorystream.create;
                connection.readstream(tempstream,   4);
                tempstream.position   :=   0;
                tempstream.readbuffer(size,   4);
                tempstream.free;
                //待接收数据大小
                size1   :=   size;
                if   (size   >   0)   then
                begin
                    tempstream   :=   tmemorystream.create;
                    connection.readstream(tempstream,   2);
                    tempstream.position   :=   0;
                    tempstream.readbuffer(rvcommand,   2);
                    tempstream.free;
                    //显示命令请求
                    rvcommand1   :=   rvcommand;
                    if   rvcommand   <   7   then
                        postmessage(frmmain.handle,   wm_dispstart,   2,0);
                    case   rvcommand   of
                        1:   begin     //收到验证命令
                                  tempstream   :=   tmemorystream.create;
                                  try
                                      connection.readstream(tempstream,   sizeof(fpvfstru));
                                      tempstream.position   :=   0;
                                      tempstream.readbuffer(fpvfstru,   sizeof(fpvfstru));   //关键这里不知道在vb怎么写,将接收到二进制数据转换为结


                                  finally
                                      tempstream.free;
                                  end;

             
           
发表于:2008-01-18 16:47:371楼 得分:0
帮顶
发表于:2008-01-21 10:43:532楼 得分:0
谢谢,难道真的没人能用vb翻译这段代码吗?
发表于:2008-01-21 15:34:103楼 得分:0
我来试试^v^
发表于:2008-01-21 17:30:284楼 得分:0

'问题1:   abinding.sendto(abinding.peerip,       strtoint(g_udpport),       s[1],       length(s));       //关键是在这里不知道vb怎样发送,我用vb的winsock
'                       控件发,但没有反应。
'可能是由于winsock没有绑定好造成的,检查一下localport,   remotehost,   remoteport,   bind代码是否正常工作

private   sub   cmdsendreq_click()
        wsleft.senddata   "req"
end   sub

private   sub   form_load()
        call   initws
end   sub


private   sub   initws()
        '初始化两个winsock控件,模拟信号源的两端
        with   wsleft
                .protocol   =   sckudpprotocol
                .localport   =   4371
                .remotehost   =   "127.0.0.1"
                .remoteport   =   4372
                .bind
        end   with
       
        with   wsright
                .protocol   =   sckudpprotocol
                .localport   =   4372
                .remotehost   =   "127.0.0.1"
                .remoteport   =   4371
                .bind
        end   with
end   sub

private   sub   wsleft_dataarrival(byval   bytestotal   as   long)
        dim   strr   as   string
        wsleft.getdata   strr,   vbstring       '获得数据
        txtleft.text   =   txtleft.text   &   "recive:     "   &   strr   &   vbcrlf
end   sub

private   sub   wsright_dataarrival(byval   bytestotal   as   long)
        dim   strr   as   string
        wsright.getdata   strr,   vbstring
        txtright.text   =   txtright.text   &   "recive:     "   &   strr   &   vbcrlf
        if   strr   =   "req"   then
                wsright.senddata   "ok"       '发送数据
        end   if
end   sub


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
tfpustru       =       packed       record//tcp/ip回送结构  
            uno:       cardinal;//用户号码       4       byte  
            uname:       array[1..10]       of       char;       //姓名           10       byte  
            udepname:       array[1..10]       of       char;//       部门           10       byte  
        end;  

private   type   tfpustru
        uno   as   long     '   vb下long是4字节的
        uname   as   string   *   10       '10字节长度的字符串
        udepname   as   string   *   10
end   type

利用copymemory函数应该可以直接将二进制数据复制到结构体中还原结构记录


快速检索

最新资讯
热门点击