我第一次用api写一个文件传输,用的是阻塞方式,客户端用户一个线程循环发送,服务端用一个线程循环接收,正常情况下没有问题,但是当我在传输过程中,拔掉客户端网线时,发现服务端线程死了,
我调试发现是 recv(Mysocket, Data, MaxSendBlock, 0) ,阻塞了操作,一直没有返回,难道说客户端已经断开或发生错误了,服务端都不知道吗?我的接收程序如下: li_RecSize:=1;
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
break;
end
当客户端出现网络问题时,服务端要怎样才能发现呢?
我调试发现是 recv(Mysocket, Data, MaxSendBlock, 0) ,阻塞了操作,一直没有返回,难道说客户端已经断开或发生错误了,服务端都不知道吗?我的接收程序如下: li_RecSize:=1;
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
break;
end
当客户端出现网络问题时,服务端要怎样才能发现呢?
try
except
end;
试试
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
//这是什么东西???,跳出条件。
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
exit; // or Abort 看看
end
while (li_RecSize>0) do
begin
li_RecSize:=recv(Mysocket, Data, MaxSendBlock, 0);
//这是什么东西???,跳出条件。
if (li_RecSize = SOCKET_ERROR) or (I <= 0) then
exit; // or Abort 看看
end