Socket 多次 Open,出现错误:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作(10055) on Api 'Connect&apo

aigo_1984 2009-11-24 10:46:19
在一个 C/S 系统中,客户端连接服务器时,如果服务器未启动,客户端会每隔几秒主动
去连接服务器(ClientSocket.Open),在每一次的ClientSocket.Open之前,都执行一次ClientSocket.close。这样,如果服务器一直未启动,就会发生以上的问题。有人说在OnError里面socket.close;我也这样做了。下面把部分代码贴出来,但是程序在运行8小时候会自己挂掉。

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
try
mainStatusBar.Panels[0].Text:='与服务器端的连接发生错误...';
ErrorCode := 0;
m_isconnected:=false; //连接状态标志
socket.Close;
except
on E:exception do
begin
writelog('异常:TForm1.ClientSocket1Error异常,原因---'+e.Message);
showmessage('TetcRoadForm.ClientSocket1Error异常'+e.Message);
end;
end;
end;

procedure TetcRoadForm.showTimeTimerTimer(Sender: TObject);
begin
if not m_isconnected then //没有连接 ,自动连接。
begin
if secondsbetween(now,m_sendtime)>1 then
begin

try
inc(m_connecttimes);
Clientsocket1.close;
ClientSocket1.Open;
m_sendtime:=now;
writelog('连接次数:'+inttostr(m_connecttimes));
except
on E:exception do
begin
writelog('异常:sockets连接异常,'+e.Message+'连接次数:'+inttostr(m_connecttimes));
end;
end;
end;
end;
end;
...全文
577 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gucunlin 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hong668 的回复:]
我现在在error 里加了这两行好像有些效果,不知道你那边有没有其他的方法
CS.socket.close;
CS.Socket.Disconnect(CS.Socket.SocketHandle);
[/Quote]
试试你的方法,我估计只有第二句有用,Close不是真的释放
hong668 2009-12-18
  • 打赏
  • 举报
回复
我现在在error 里加了这两行好像有些效果,不知道你那边有没有其他的方法
CS.socket.close;
CS.Socket.Disconnect(CS.Socket.SocketHandle);
hong668 2009-12-18
  • 打赏
  • 举报
回复
我也遇到这个问题了,不知道你现在可解决了,能不能和我说一下,我的QQ28276458,麻烦了。
aigo_1984 2009-11-24
  • 打赏
  • 举报
回复
谢谢您的关注,这个帖子我有看过,无法解决我要的解决的问题。
bdmh 2009-11-24
  • 打赏
  • 举报
回复
看看这个帖子是否有你需要的信息
http://topic.csdn.net/t/20020423/23/671232.html

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧