如何在服务端释放客户端已经退出的socket?

netyou 2004-03-30 04:29:08
我用TServerSocket写一个SOCKET服务器程序,客户的连接有点像浏览器,连上来取走数据就关闭。我发现有这样一个问题,当我客户端连接接近4000次的时候,服务器没有办法再接收新的连接。调试发现以前的客户端连接socket没有正常释放。在OnClientDisConnect事件处理函数中调用Socket->Close()或者Socket->Free() 或者delete Socket都不可行,报内存错误, WHY??? 有解决办法吗???希望得到各位高手的指点。
...全文
207 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqzyf 2004-07-01
  • 打赏
  • 举报
回复
偶也遇到同样问题,不过我的客户不多,我没有管它
hnwzs 2004-06-25
  • 打赏
  • 举报
回复
这情况应该用UDP
ujjcel 2004-06-24
  • 打赏
  • 举报
回复
mark
huiwww 2004-06-23
  • 打赏
  • 举报
回复
用disconnect()属性试试看
aiunong 2004-06-23
  • 打赏
  • 举报
回复
gz
seem 2004-04-23
  • 打赏
  • 举报
回复
老大,不会吧!我在客户端用ClientSocket1.Active:=False 就可以释放掉服务器端的socket
solonet 2004-04-22
  • 打赏
  • 举报
回复
真希望有高人能出来帮忙这些问题!

http://expert.csdn.net/Expert/topic/2994/2994314.xml?temp=.7303888
solonet 2004-04-22
  • 打赏
  • 举报
回复
up


http://expert.csdn.net/Expert/topic/2994/2994314.xml?temp=.7303888
netyou 2004-04-03
  • 打赏
  • 举报
回复
int_index取值没有错的,就是
for(int i=0;i<ServerSocket1->Socket->ActiveConnections;i++)
{
if(ServerSocket1->Socket->Connections[i]==Socket)//确定是那一个客户端
{
ServerSocket1->Socket->Connections[i]->Close();
}
}
我想因为这个socket客户端已经关闭,你再关闭所以就报错拉!
solonet 2004-04-02
  • 打赏
  • 举报
回复
TO 楼主:
‘只要一用form1.ServerSocket1.Socket.Connections[int_index].Close;
这个报内存错误,说操作一个非法的socket!’

这人是不会错的,我的程序里就是这样处理的。

可能是int_index 的值取错了,吧,它是整形值;是从0..n的数。
netyou 2004-04-02
  • 打赏
  • 举报
回复
呵呵,我试试,谢谢!
wgj1922 2004-04-02
  • 打赏
  • 举报
回复
你不要修改clientsocket的localport值,使其为初始值0就可以。要绑定端口值,直接设置
localport值就行啦:例:将端口设为2004,clientsocket1.localport:=2004;
netyou 2004-04-01
  • 打赏
  • 举报
回复
客户端绑定的本地端口localport,怎么绑定啊,我不知道,能教教我吗?
wgj1922 2004-04-01
  • 打赏
  • 举报
回复
你可以试一下,把客户端绑定的本地端口localport设置为0,或不绑定本地端口。
netyou 2004-03-31
  • 打赏
  • 举报
回复
会出现“stack overflow”错误提示!
netyou 2004-03-31
  • 打赏
  • 举报
回复
只要一用form1.ServerSocket1.Socket.Connections[int_index].Close;
这个报内存错误,说操作一个非法的socket!
SuperSeventh 2004-03-30
  • 打赏
  • 举报
回复
学习
solonet 2004-03-30
  • 打赏
  • 举报
回复
//删除之前先关闭一个连接;
form1.ServerSocket1.Socket.Connections[int_index].Close;
netyou 2004-03-30
  • 打赏
  • 举报
回复
客户端已经用 ClientSocket1->Close();释放了的!
insert2003 2004-03-30
  • 打赏
  • 举报
回复
在客户端释放

1,593

社区成员

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

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