| 发表于: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; |
|
|
|
|