请问高人:winsock UDP Server 接收数据后调用消息处理类,却丢失客户端地址
请教高人:winsock UDP Server 接收数据后调用消息处理类,却丢失客户端地址
服务端
procedure TServerForm.WMSOCKET(var msg: TMessage);
var
addr: TSockAddrIn;
addrlen: Integer;
buffer: array [0..255] of byte;
SocketMsgHandler:TMsgHandler;
begin
case WSAGetSelectEvent(msg.LParam) of
FD_READ:
begin
addrlen:=sizeof(addr);
recvfrom(sock,buffer,255,@addr,addrlen);
SocketMsgHandler.handleMessage(buffer,addr);
end;
我的消息处理类也很简单,代码:
procedure TMsgHandler.handleMessage(buffer:array of byte;addr: TSockAddrIn);
begin
//先处理数据
.......
//然后返回处理结果,所用的sock已经从主类传递过来
sendto(sock,data,sizeof(data),0,@addr,addrlen);
end;
可是我的客户端死活等不到返回结果。
如果我把处理逻辑直接copy到主程序的消息函数中,客户端就可以成功收到消息,修改后可用的代码如下
procedure TServerForm.WMSOCKET(var msg: TMessage);
var
addr: TSockAddrIn;
addrlen: Integer;
buffer: array [0..255] of byte;
SocketMsgHandler:TMsgHandler;
begin
case WSAGetSelectEvent(msg.LParam) of
FD_READ:
begin
addrlen:=sizeof(addr);
recvfrom(sock,buffer,255,@addr,addrlen);
//直接理数据
.......
//然后返回处理结果,所用的sock已经从主类传递过来
sendto(sock,data,sizeof(data),0,@addr,addrlen);
end;
请问各位老大,是什么原因呢?
------解决方案--------------------
为你能自己解决问题而高兴,有机会在此问题上向你讨教讨教。
谢谢你的关照!
服务端
procedure TServerForm.WMSOCKET(var msg: TMessage);
var
addr: TSockAddrIn;
addrlen: Integer;
buffer: array [0..255] of byte;
SocketMsgHandler:TMsgHandler;
begin
case WSAGetSelectEvent(msg.LParam) of
FD_READ:
begin
addrlen:=sizeof(addr);
recvfrom(sock,buffer,255,@addr,addrlen);
SocketMsgHandler.handleMessage(buffer,addr);
end;
我的消息处理类也很简单,代码:
procedure TMsgHandler.handleMessage(buffer:array of byte;addr: TSockAddrIn);
begin
//先处理数据
.......
//然后返回处理结果,所用的sock已经从主类传递过来
sendto(sock,data,sizeof(data),0,@addr,addrlen);
end;
可是我的客户端死活等不到返回结果。
如果我把处理逻辑直接copy到主程序的消息函数中,客户端就可以成功收到消息,修改后可用的代码如下
procedure TServerForm.WMSOCKET(var msg: TMessage);
var
addr: TSockAddrIn;
addrlen: Integer;
buffer: array [0..255] of byte;
SocketMsgHandler:TMsgHandler;
begin
case WSAGetSelectEvent(msg.LParam) of
FD_READ:
begin
addrlen:=sizeof(addr);
recvfrom(sock,buffer,255,@addr,addrlen);
//直接理数据
.......
//然后返回处理结果,所用的sock已经从主类传递过来
sendto(sock,data,sizeof(data),0,@addr,addrlen);
end;
请问各位老大,是什么原因呢?
------解决方案--------------------
为你能自己解决问题而高兴,有机会在此问题上向你讨教讨教。
谢谢你的关照!