双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

急,winsock api问题

diablobaal diablobaal 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟对winsock api不熟,现要通讯一个电表,用vb已实现,代码详见http://topic.csdn.net/u/20100118/10/46b7f270-9077-458c-812b-82ee1260a343.html
在网上查了一段代码,将vb代码改为如下的delphi代码——
function GetDatax(IP:String;startaddress:integer;datacount:integer): TResultArray;
var
Errorcode,AddSize:Integer;
ret:Integer;
WSAData : TWSAData;//一个数据结构,包含winsock的所有属性
Skc : TSocket;//套接字
SockAdd_Inc,Add : TSockAddrIn;//套接字的数据结构,包含套接字的所有属性
order:array[0..11] of char;//命令数组
FSocket : TSocket;
FBuf : TResultArray;
i:Integer;
tempx:Integer;
begin
//*********************加载WinSock动态链接库
Errorcode:=WSAStartup($0101,WSAData);//加载winsock库
if Errorcode<>0 then//WSAStartup方法,必须通过了才能使用winsock api
begin
ShowMessage('加载WinSock动态链接库失败');
result:=fbuf;
exit;
end;
//*********************在客户端创建一个套接字
skc := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if skc = SOCKET_ERROR then
begin
showmessage('创建套接字失败');
result:=fbuf;
Exit;
end;
SockAdd_Inc.sin_family := AF_INET;
SockAdd_Inc.sin_port := htons(502);
SockAdd_Inc.sin_addr.S_addr := inet_addr(pchar(IP));
//*********************连接服务器
tempx:=connect(skc,SockAdd_Inc,sizeof(SockAdd_Inc));
//*********************发送数据
order[0] := chr(0); //交换识别号高字节,通常为0
order[1] := chr(0); //交换识别号低字节,通常为0
order[2] := chr(0); //协议识别号高字节,为0
order[3] := chr(0); //协议识别号低字节,为0
order[4] := chr(0); //以下字节长度高字节
order[5] := chr(6); //以下字节长度低字节
order[6] := chr(1); //单元识别号,确省为255,即地址
order[7] := chr(3); //功能代码
order[8] := chr(startaddress div 256); //读数据的起始地址高字节
order[9] := chr(startaddress Mod 256); //读数据的起始地址低字节
order[10] := chr((datacount * 2) div 256); //显示的参数长度高字节
order[11] := chr((datacount * 2) Mod 256); //显示的参数长度低字节
send(SkC,order,12,0);
//*********************接收数据
AddSize := sizeof(Add);
FSocket:=accept(skc,@Add,@AddSize);
ret := recv(FSocket,fbuf,256,0);
if ret<=0 then
begin
ShowMessage('接收数据失败');
shutdown(skc,SD_SEND);
closesocket(skc);
result:=fbuf;
exit;
end;
//*********************断开连接
shutdown(skc,SD_SEND);
closesocket(skc);
result:=fbuf;
end;

但没有收到任何数据,单步调试发现tempx:=connect(skc,SockAdd_Inc,sizeof(SockAdd_Inc));
tempx=0,不知代码错在哪,请高手指教
...全文
评论 13
收藏 已收藏
分享
返回顶部
diablobaal
Windows SDK/API 1,184 成员 22,326 内容