服务器端(TServerSocket)出现10053,10054错误怎么办

xwy1982 2005-06-27 08:36:30
客户端:
void __fastcall TForm1::Button3Click(TObject *Sender)//退出
{
logoutSend=IntToStr(nklen)+MyName+"@logout@";
ClientSocket1->Socket->SendText(logoutSend);
ClientSocket1->Close();
}

服务器端:
if(SubData1=="@logout@")//如果收到的是退出的信息,则向在线用户发送用户退出信息
{
m=ServerSocket1->Socket->ActiveConnections;
for(i=0;i<m;i++)
{ServerSocket1->Socket->Connections[i]->SendText(用户退出信息);}
}


为什么有时候退出是服务器端会出现10053和10054错误,有时不会?是哪里的问题?要怎么正确退出?

附(10053。10054错误原因):
WSAECONNABORTED 10053
Software caused connection abort.
An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.

WSAECONNRESET 10054
Connection reset by peer.
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.

...全文
1071 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwy1982 2005-07-02
  • 打赏
  • 举报
回复
呵呵,楼上的想法跟我一样,我以前问过别人,他说断开以后,会自动整上去,不知是不是,没有测试过,有空测试一下
joe_zhu 2005-07-01
  • 打赏
  • 举报
回复
从LZ说的最后一个现象来看,应该是客户端断开以后,
执行ServerSocket1->Socket->Connections[i]->SendText(用户退出信息)发生了错误。
举例说明:加入有10个客户端连接到服务器,此时你将原本索引为3的客户端断开连接。
ActiveConnections的数量变为9,但此时你进行for循环时Connections[3]就找不到了
所以会报错,而对于最后连接的客户端就不会存在这个问题了

一点愚见,供LZ参考。你可以测试一下ServerSocket会不会将他的连接索引重排

xwy1982 2005-06-30
  • 打赏
  • 举报
回复
可是这样的包有什么用呢,不是跟普通包一样吗?就是包含的信息不同而已
s端能不能把一个c端断开,c端不会出错,然后的c端的disconnecting里关闭
constantine 2005-06-30
  • 打赏
  • 举报
回复
这个很简单,自己定义一对包,一个又C发给S,说我要断开了,S受到这个包之后就发另一个包给C,告诉他你可以断开了,C受到这个确认包后再断开就行了,跟其他信令一样,老僵大概是这个意思吧
xwy1982 2005-06-29
  • 打赏
  • 举报
回复
客户端不要以ButtonClick事件当中调用关闭,而应该是收到服务器确认消息后再执行关闭连接操作。
-------------------
这个要怎么实现啊

还有一个现象忘记说了,就是如果是最后一个连接到服务器的,不管怎么断开都不会有错误
我不懂电脑 2005-06-28
  • 打赏
  • 举报
回复
同意 unsigned(僵哥(当程序语言成为普及的第三语言之后……)) ( ) 信誉:105 2005
僵哥 2005-06-28
  • 打赏
  • 举报
回复
其实关键问题就在上面的代码当中体现出来了。
客户端需要关闭,然后传一个消息给服务器,接着客户端调用关闭,服务器收到关闭消息之后又回传一条消息给客户端……在这一过程当中,楼主忽略了一点就是中间的传输是需要时间的,并且使用的是非阻塞模式,当网络相对比较繁忙时,那么客户端的消息可以还没传到服务器,客户端就关闭了连接,此时正好服务器收到消息,几预回传消息时,发现客户端已经关闭,故而出现上面的错误信息。要解决的办法应该是客户端不要以ButtonClick事件当中调用关闭,而应该是收到服务器确认消息后再执行关闭连接操作。
constantine 2005-06-28
  • 打赏
  • 举报
回复
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
这样就不会出来了
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制策略开展系统性研究,基于Simulink平台构建了完整的闭环仿真模型,深入探讨了电机在矢量控制下的动态响应特性与控制性能。研究内容涵盖了矢量控制的核心理论与关键技术模块,包括Clarke与Park坐标变换、转子磁场定向控制(FOC)、SVPWM调制算法、双闭环PI控制器(电流环与速度环)的设计与参数整定。通过仿真验证了系统在启动、突加负载及变速工况下的稳定性、抗干扰能力与动态调节精度,有效实现了对电机转矩与转速的精确控制。该模型不仅有助于深化对PMSM控制机理的理解,也为高性能电机驱动系统的算法开发与工程化应用提供了可靠的仿真验证平台。; 适合人群:具备自动控制原理、电机学基础及Simulink仿真能力的电气工程、自动化、新能源等相关专业的高年级本科生、研究生以及从事电机驱动开发的初级科研人员与工程师。; 使用场景及目标:①作为高校课程设计、毕业设计或科研项目中PMSM控制系统的学习案例,用于掌握矢量控制算法的实现流程与模块化设计方法;②帮助研究人员理解各控制环节间的耦合关系,通过调整PI参数优化系统性能,并为进一步研究无传感器控制、弱磁扩速、先进非线性控制策略等高级课题奠定基础; 阅读建议:建议结合经典电机控制教材同步学习,重点剖析各功能模块的信号流向与数学原理,亲自动手搭建仿真模型,通过改变运行条件和控制器参数观察系统响应变化,从而深入掌握矢量控制系统的动态特性和调试技巧。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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