请张无忌指教,socket问题(关于程序的稳定性)(59分)

  • 主题发起人 主题发起人 toplucky01
  • 开始时间 开始时间
T

toplucky01

Unregistered / Unconfirmed
GUEST, unregistred user!
不好意思,我的分只有59。
问题是这样的
serversocket,非组塞型,onerror事件如下:
procedure TServer_Form.Power_ServerClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
var
tmp:string;
begin
try
case ord(errorevent) of
0:tmp:='eegeneral';
1:tmp:='eeSend';
2:tmp:='eeReceive';
3:tmp:='eeConnect';
4:tmp:='eeDisconnect ';
5:tmp:='eeAccept';
end;
writeln(filehandle,socket.remoteaddress+'发生错误'+'===='+tmp);//写日志
if socket.Connected then
bufsend(socket,inttostr(7773)); //发送数据
//socket.SendText(inttostr(relogin_server));
errorcode:=0;
except
errorcode:=0;
end;
end;

//发送数据的方法
procedure TServer_Form.bufsend(sock: tcustomwinsocket; str: string);
var
tmpstr:string;
buf :array[0..1024] of char;
i,j:integer;
begin
tmpstr:=str;
j:=length(tmpstr);
copymemory(@buf[0],@tmpstr[1],j);
if not Sock.Connected then begin
writeln(filehandle, Format('%s 发生:“连接不存在错误”,无法回送数据!', [datetimetostr(now)]));
writeln(filehandle, Format('待回送给 %s 数据为:%s!', [sock.remoteaddress, tmpstr]));
exit;
end;
sock.SendBuf(buf,j);
if length(tmpstr)<20 then writeln(filehandle,datetimetostr(now) + ' 回送给:'+sock.remoteaddress+'==='+tmpstr);
end;

结果日志如下(一旦发生错误):
10.10.10.1发生错误====eeDisconnect
{以下几十个}
10.10.10.1发生错误====eeSend
10.10.10.1发生错误====eeSend
..
{以下几十个}
2003-06-23 09:56:00 回送给:===7773
2003-06-23 09:56:00 回送给:===7773
..
请问:
1、为什么在1秒钟内会触发如此多的onerror?
2、我将onerror中的errorcode:=0了,为什么还会触发onerror?
3、在非阻塞型socket的应用中,onerror事件的写法是怎么写的?
 
张无忌,你在吗?
 
发送包的段码少了两个字符,一个数字。
 
后退
顶部