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

Netcity 2008-01-17 05: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;


...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Netcity 2008-01-21
  • 打赏
  • 举报
回复
谢谢,难道真的没人能用VB翻译这段代码吗?
iambluebird 2008-01-21
  • 打赏
  • 举报
回复

'问题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函数应该可以直接将二进制数据复制到结构体中还原结构记录
iambluebird 2008-01-21
  • 打赏
  • 举报
回复
我来试试^v^
zhouchunyu 2008-01-18
  • 打赏
  • 举报
回复
帮顶

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧