TWinSocketStream:Stream.Read error64,指定的网络名不再可用! (100分)

  • 主题发起人 主题发起人 hxygod
  • 开始时间 开始时间
H

hxygod

Unregistered / Unconfirmed
GUEST, unregistred user!
我用阻塞模式通讯,当客户端意外中断后,服务器端报错:“Read error64,指定的网络名不再可用!”,正常情况下不管是断开链接还是发送数据都可以,哪位大侠知道我在服务器端如何屏蔽这个系统错误吗,兄弟我已经被这个问题困惑有一个星期了,就是不知道怎么处理

服务器端接收:
procedure TServerRead.ClientExecute;
var
Stream : TWinSocketStream;
Buf : array[1 .. 2048] of Char;
len : integer;
begin
tmp_Stream := TMemoryStream.Create;
while (not Terminated) and ClientSocket.Connected do
begin
try
Stream := TWinSocketStream.Create(ClientSocket, 1000);
FillChar(Buf, SizeOf(Buf), 0);
try
if Stream.WaitForData(1000) and ( ClientSocket.Connected) then
begin
len:=Stream.Read(Buf, SizeOf(Buf));//Debug就是在这句话报错
if len= 0 then
begin
ClientSocket.Close;
Terminate ;
end;
end
else
begin
ClientSocket.Close;
Terminate;
end;
except
showmessage('Error!');
end;
except
HandleException;
end;
end;
end;


客户端发送:
procedure TClientWrite.Execute;
var
MyStream : TWinsocketStream;
buffer : array[1 .. 2048] of Char;
i,j : integer;
s:string;
begin
FillChar(buffer, SizeOf(buffer), 's');
MyStream := TWinsocketStream.Create(Form1.CS.Socket,50000);
While (Not Terminated) and (Form1.CS.Active) do
begin
s:='hello!';
StrPCopy(@buffer, S);
j:=length(s);
i :=MyStream.Write(buffer,j);
if i = 0 then
Form1.CS.Close;

Terminate;
end;
MyStream.Destroy;
end;

 
//错误代码64是对方主动断开了连接,处理办法如下:
MyStream := TWinsocketStream.Create(Form1.CS.Socket,50000);
While (Not Terminated) and (Form1.CS.Active) do
begin
s:='hello!';
StrPCopy(@buffer, S);
j:=length(s);
try
i :=MyStream.Write(buffer,j);
except
//网络发生断开连接
end;
if i = 0 then
Form1.CS.Close;

Terminate;
end;
MyStream.Destroy;
 
我的错误是出现在服务器端,应该和客户端无关,比如说我将客户端的网线无条件断开时,服务器端就会error64报错,这是客户端根本就没有调用写进程
 
我经常在服务器里出现这个错误,一般都是Client主动断开了连接或者
网络出现了问题。很正常。
 
你出错的原因是在DEBUG模式下,如果不在DEBUG模式下是不会有这个提示的,
 
我试过了,不管是不是Debug模式都报这个错!
有没有办法在服务器端可以屏蔽这个错误,或者截获到这个错误而执行我自己的报错,否则的话好像太傻了,特别是将系统提交给客户使用的时候,发现必须服务器端程序重新启动才能正常运行
 
except
HandleException;////去掉这句代码就OK了,你加他干吗???
end;
 
我估计是你抄DELPHI的帮助的代码,HandleException;就是挑出错误提示的,
 
可以了,多谢大侠指点我把
except
HandleException;////去掉这句代码就OK了,你加他干吗???
end;
改成以下就不报错了:
except
showmessage('ERROR!!!!!!!!');
ClientSocket.Close;
Terminate;
end;

100分送上了!
 
后退
顶部