Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
2013-01-15 09:56
561 查看
在使用Delphi中的TClientSocket和TServerSocket进行通信编程时,当使用TClientSocket这方的客户端使用TClientSocket.close断开连接并退出程序时,使用TServerSocket这方的服务端有时会报‘’Asynchronous socket error 10053‘这个错误,查阅了这个错误说明:Software caused connection abort.(因软件原因导致连接终止)。这个原因说明很鸡肋,因为你还是无法确定到底是哪个地方出现了问题。
实际上出现这个错误很大的原因是没有客户端和服务端的连接没有断开就直接将TClientSocket给free掉造成的,在这里有两种解决方法(其实就是一种,只不过解决的地方不同而已,都是将连接断开)
一:在调用TClientSocket的Close函数之前调用TClientSocket.Socket.Close将连接断开,但这也存在另一个问题,就是还存在未接收完全的数据,此时服务端仍然会报Asynchronous socket error 10053错误,因此在调用TClientSocket.Socket.Close之前可再调用一次TClientSocket.Socket.ReceiveText将服务端发送的数据接收完全
二:在服务端的OnClientError事件中添加如下代码:
case ErrorCode of
10053: Socket.Close;
end;
ErrorCode := 0;
将连接断开,并设置ErrorCode为0,如果不设置,虽然连接断开,但错误码仍然是10053,仍然会弹窗报Asynchronous socket error 10053。
实际上出现这个错误很大的原因是没有客户端和服务端的连接没有断开就直接将TClientSocket给free掉造成的,在这里有两种解决方法(其实就是一种,只不过解决的地方不同而已,都是将连接断开)
一:在调用TClientSocket的Close函数之前调用TClientSocket.Socket.Close将连接断开,但这也存在另一个问题,就是还存在未接收完全的数据,此时服务端仍然会报Asynchronous socket error 10053错误,因此在调用TClientSocket.Socket.Close之前可再调用一次TClientSocket.Socket.ReceiveText将服务端发送的数据接收完全
二:在服务端的OnClientError事件中添加如下代码:
case ErrorCode of
10053: Socket.Close;
end;
ErrorCode := 0;
将连接断开,并设置ErrorCode为0,如果不设置,虽然连接断开,但错误码仍然是10053,仍然会弹窗报Asynchronous socket error 10053。
相关文章推荐
- Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
- Delphi 通信报Asynchronous socket error 10053错误的一个解决方法
- LR中错误代号为27796的一个解决方法
- 运行VS2008提示"找不到一个或多个组件,请重新安装该应用程序"错误的解决方法V
- 在系统启动时至少有一个服务或驱动程序产生错误--解决方法
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- Delphi使用BDE连接远程MS SQL SERVER 2000数据库时出现“Db-library network communciations layer not loaded.”错误的解决方法
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- HTTP 500 - 内部服务器错误 的一个解决方法
- 网上找到一个解决 zune 连接错误的方法。
- 移动硬盘一个分区“数据循环冗余错误”要求格式化解决方法
- office2010出现“windows installer 服务不能更新一个或多个受保护”的错误解决方法
- Delphi “Invalid floating point operation.”错误的解决方法(使用System单元提供的Set8087CW函数禁用浮点异常)
- SAE的一个错误解决方法
- Delphi exe动态调用加载bpl 报地址错误的解决方法
- LR中错误代号为27796的一个解决方法-Zee
- 一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法
- 网站后台登录aspcms 提示错误号:-2147467259,错误描述:操作必须使用一个可更新的查询。sql=update AspCms_Content set TimeStatus=0 where TimeStatus=1 and Timeing <= 解决方法。
- 关于IE浏览器加载图片报206错误的一个解决方法
- Delphi出现“borland license information was found,but it is not valid for delphi”的错误,无法运行的解决方法