ClientSocket控件断线重连问题

attor 2019-05-24 05:01:22
客户端不活跃时,回断开连接,我在ClientSocket1Disconnect()函数中写连接函数不起作用。

void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket)
{

if(ClientSocket1->Active == true)
{
ClientSocket1->Active = false;

}else
{
//ClientSocket1->Free();
ClientSocket1->Close();
UnicodeString serverIp = "127.0.0.1";
ClientSocket1->Host = serverIp; //设置要访问的主机
ClientSocket1->Open();
try{
if(ClientSocket1->Active == false)
{
throw Exception("");
}
}catch(Exception &e)
{
ShowMessage("断开连接");
ClientSocket1->Close();
ClientSocket1->Active = false;
}
}
}
...全文
368 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2019-05-26
  • 打赏
  • 举报
回复
PostMessage函数是执行完直接返回的,SendMessage则不然,貌似是等消息被处理以后才返回。
ooolinux 2019-05-25
  • 打赏
  • 举报
回复
引用 8 楼 hyaaaafighting 的回复:
[quote=引用 7 楼 ooolinux 的回复:]
参考:
简单的TClientSocket、TServerSocket发送接收消息程序ServerSocket1的OnClientDisconnect问题
https://bbs.csdn.net/topics/392303481
我在disconnect函数中用PostMessage(Button1->Handle,BM_CLICK,0,0);我调试发现没有映射到onclick函数中,能讲一下PostMessage的用法吗[/quote]

鼠标点击一个按钮,从硬件到驱动到变成Windows消息,win系统会把一条鼠标点击消息发送给一个窗口消息队列,窗口过程响应消息执行相应代码,在BCB中就是ButtonClick处理函数。PostMessage就是请求win把一条消息发送给一个窗口(按钮属于窗口控件,也是窗口)。这个不是消息映射。BCB6 help有个专门的win32 API还是win32 SDK菜单项可以查,也可以查MSDN。
attor 2019-05-25
  • 打赏
  • 举报
回复
引用 7 楼 ooolinux 的回复:
参考:
简单的TClientSocket、TServerSocket发送接收消息程序ServerSocket1的OnClientDisconnect问题
https://bbs.csdn.net/topics/392303481
我在disconnect函数中用PostMessage(Button1->Handle,BM_CLICK,0,0);我调试发现没有映射到onclick函数中,能讲一下PostMessage的用法吗
ooolinux 2019-05-25
  • 打赏
  • 举报
回复
在onclick函数里改变点界面的什么,比如标题,比调试方便。
ooolinux 2019-05-24
  • 打赏
  • 举报
回复
参考:
简单的TClientSocket、TServerSocket发送接收消息程序ServerSocket1的OnClientDisconnect问题
https://bbs.csdn.net/topics/392303481
ooolinux 2019-05-24
  • 打赏
  • 举报
回复
你是说手动点击按钮重连正常,PostMessage模拟点击按钮重连以后发数据服务端收不到?
attor 2019-05-24
  • 打赏
  • 举报
回复
引用 2 楼 ooolinux 的回复:
我想客户端断开时,服务端也要对应关闭连接。重连时,再接受新的连接。应该是新的连接。
当我使用按钮重连时,不会出现这样的问题
attor 2019-05-24
  • 打赏
  • 举报
回复
引用 3 楼 ooolinux 的回复:
我想客户端断开时,服务端也要对应关闭连接。重连时,再接受新的连接。应该是新的连接。

新的连接用 this->ClientSocket1->Socket->SendBuf((char *)&Msg,sizeof(Msg));
发数据服务没收到该怎么解决
ooolinux 2019-05-24
  • 打赏
  • 举报
回复
我想客户端断开时,服务端也要对应关闭连接。重连时,再接受新的连接。应该是新的连接。
attor 2019-05-24
  • 打赏
  • 举报
回复
引用 1 楼 ooolinux 的回复:
你先试试,做一个按钮来重连,在OnDisconnect里PostMessage(Button1->Handle,一个点击消息)看行不行,不能直接调用Button1->Click()。如果可以,改成消息映射可以不用按钮。
重连之后socket会改变吗,消息发送不出去了
ooolinux 2019-05-24
  • 打赏
  • 举报
回复
你先试试,做一个按钮来重连,在OnDisconnect里PostMessage(Button1->Handle,一个点击消息)看行不行,不能直接调用Button1->Click()。如果可以,改成消息映射可以不用按钮。

1,316

社区成员

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

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