控件使用问题:TServerSocket 通讯的一个异常,百思不解,请大家看看

nnfish 2005-05-26 10:17:56
用BCB6+UP4,写了两个小程序。服务器端、客户端两者互相发送、接收一些数据。

经测试后,在如下的情况中没有问题
1、同网段的两台计算机(192.168.0.10 <---> 192.168.0.11),--测试通过。
2、使用路由(由第三台WIN2000计算机配置软路由),192.168.0.10,<-路由->192.168.1.11--测试通过

但如下这种情况通讯失败.
由第四台WIN2003,不安装配置软件路由服务,而是安装配置ISA2004,配置好后,
192.168.0,,192.168.1这两个网段内的计算机网络通讯正常,可以通过网上邻居复制共享文件。

而运行这两个测试程序时,192.168.0.10,<-ISA2004->192.168.1.11,,会出现一个以前有网友问过的问题。http://search.csdn.net/Expert/topic/25/25283.xml?temp=.5044062

编程说明:

服务器:使用TServerSocket,ServerType属性:设置成为stThreadBlocking
客户端:使用TTcpClient

服务器端的代码出错在那个线程中
....
if (pStream->WaitForData(OverTime))//这一句等待数据成功
{
if((aLen=pStream->Read(Buf, 16))==0) ///一读数据就有异常。

...

我想不出是什么问题,会是ISA2004引起的吗,,还是程序有问题,

请大家说说看。分可再加

...全文
302 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnfish 2005-05-26
  • 打赏
  • 举报
回复
好像双不是这个原因,同样的代码,在不同的网络环境下,体现不一样,不理解是哪边的问题,
铖邑 2005-05-26
  • 打赏
  • 举报
回复
其中:
1的做法很常见,一般是初学网络编程的程序员的做法,其实也不会出什么问题;
2的做法出现在telnet程序中
3的做法在很多大型应用中出现
铖邑 2005-05-26
  • 打赏
  • 举报
回复
也就是说,有几种做法可以选择:
1、客户端“粗暴的”关闭连接,在关闭连接之前不通知服务器,服务器可以检测到连接已经中断,释放相应的资源;
2、客户端“温柔的”通知服务器会话已经结束,由服务器来主动关闭连接,客户端可以检测到连接已经中断;
3、客户端同2中一样通知服务器会话已经结束,但是关闭一个半连接(调用shutdown函数),这时服务器仍然可以接收数据,但是收完数据之后可以检测到检测到连接已经中断。这个功能TClientSocket无法提供,需要调用API函数来实现。
铖邑 2005-05-26
  • 打赏
  • 举报
回复
不知道ISA2004是什么东东。不过,如果客户端给服务器发送消息通知服务器连接关闭时,可以由服务器端来主动关闭连接,客户端可以检测到该连接已中断,触发DISCONNECT事件。
nnfish 2005-05-26
  • 打赏
  • 举报
回复
服务端用TWinSocketStream流去读时,出现异常:Read error 64 指定的网络名不可再用。

1,317

社区成员

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

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