捕获Socket绑定(band)异常? 急,在线等.......

aerospace 2003-08-29 11:01:37
用C++builder的TClientSocket和 TServerSocket写Socket程序.
在一个程序中用了一个TClientSocket和一个TServerSocket控件.它们的配置信息(IP,Port)固定. 当远端的相应通信端在运信,启动该程序,能正确运行.Socket连接正常. 再启动一个我写的程序,Socket配置和前一个一样. 连接的时候发生错误:Windows socket error:通常每个套节字地址(协议/网络地址/端口),只允许使用一次.(10048),on API 'band'.
目前的问题是,我捕获不到这个异常,无法进行处理.
各位看看是怎么回事,怎么解决这个问题呀??
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcaiyao 2003-09-02
  • 打赏
  • 举报
回复
一个端口不可以被两个socket同时监听,出现10048错误是因为端口已被占用。
你捕捉不到错误,是因为你将ServerSocket的SeviceType设置成stNonThread,是异步的,所以你不可以用try....catch进行捕捉,只能在OnError中去处理这个错误。
swites 2003-09-01
  • 打赏
  • 举报
回复
在同一台机器上,同时运行相同的两个server是不可以的!
MazeHunter 2003-09-01
  • 打赏
  • 举报
回复
我自己已经发现原因了。
当Socket Open的时候,有的错误要等一会返回。try...catch 捕捉不到,但可在OnError 事件事件中处理。
有的错误立即返回,可用try...catch 捕捉。不会传到OnError 事件中。

上面的错误用try ... catch 即可。
pp616 2003-08-31
  • 打赏
  • 举报
回复
呵呵。这个错误的意思是“网络地址/端口”已在使用。
很有可能是你使用的port正出于TIME_WAIT状态。或是有别的程序正在使用。
aerospace 2003-08-29
  • 打赏
  • 举报
回复
程序把它自动处理了,显示一个错误信息,然后继续运行.

当第一次启动这个程序的时候,如果远端的相应通信端在未启动,则这边的TClientSocket的出错处理事件中能捕获到这个异常.
但上面那个捕获不到.
mme 2003-08-29
  • 打赏
  • 举报
回复
响应 OnError 事件,并把ErrorCode的值设为0来重载异常处理方法.
这样就可以在OnError事件中处理所有可能的错误代码了.

1,317

社区成员

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

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