社区
网络及通讯开发
帖子详情
散分,TClientSocket断开后自动重连服务器问题?
gust99
2003-10-22 11:17:50
问题描述祥见我的另一帖!解决后,再开帖送分!
http://expert.csdn.net/Expert/topic/2372/2372800.xml?temp=.9404261
...全文
125
10
打赏
收藏
散分,TClientSocket断开后自动重连服务器问题?
问题描述祥见我的另一帖!解决后,再开帖送分! http://expert.csdn.net/Expert/topic/2372/2372800.xml?temp=.9404261
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoguoru
2004-02-27
打赏
举报
回复
试一下在服务器端检测如果某一客户端断了,你就将那个连接套接字也执行一次关闭操作。
hongliqiu
2003-10-31
打赏
举报
回复
问题是,如果服务器不开,不断的连的话,就会出现缓冲区满的异常
这样的话,等待的时间使它不断延长。
或者重试多次后等待一个比较长的随机时间,再重试连接。如此循环。
Yuehj
2003-10-31
打赏
举报
回复
在Socket的Disconnected事件中打开一个定时器,在定时器事件中重新建立连接,十分有效
代码简单易懂,只需3行代码即可
gust99
2003-10-25
打赏
举报
回复
matq2008(叶子) ,我就是用TEvent实现你的方法的,问题是,如果服务器不开,不断的连的话,就会出现缓冲区满的异常
叶子哟
2003-10-24
打赏
举报
回复
何->果,呵呵
叶子哟
2003-10-24
打赏
举报
回复
俺提供一种笨方法:用个Timer控件,隔一定时间检查一下,如何active=false,则active=true
sunny6281
2003-10-23
打赏
举报
回复
关注
friendbcb
2003-10-22
打赏
举报
回复
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <ScktComp.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TTimer *Timer1;
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall ClientSocketConnect(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket);
void __fastcall ClientSocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
int &ErrorCode);
void __fastcall FormCreate(TObject *Sender);
void __fastcall ClientSocketConnecting(TObject *Sender,
TCustomWinSocket *Socket);
private: // User declarations
TClientSocket *MyCliSocket ;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
public:
TClientSocket * __fastcall InitClientSocket();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MyCliSocket=NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(MyCliSocket)
{
MyCliSocket->Close();
delete MyCliSocket;
}
MyCliSocket=InitClientSocket();
MyCliSocket->Open();
}
//---------------------------------------------------------------------------
TClientSocket * __fastcall TForm1::InitClientSocket()
{
TClientSocket *TempSocket=new TClientSocket(this);
TempSocket->Host="127.0.0.1";
TempSocket->Port=5555;
TempSocket->OnConnect=ClientSocketConnect;
TempSocket->OnDisconnect=ClientSocketDisconnect;
TempSocket->OnError=ClientSocketError;
TempSocket->OnConnecting=ClientSocketConnecting;
return TempSocket;
}
void __fastcall TForm1::ClientSocketConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer1->Enabled=false;
Label1->Caption="已连接";
Label1->Update();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocketDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Timer1->Enabled=true;
Label1->Caption="断开连接";
Label1->Update();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Label1->Caption="发生错误";
Label1->Update();
ErrorCode=0;
if(Timer1->Enabled==false)
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(MyCliSocket==NULL)
MyCliSocket=InitClientSocket();
MyCliSocket->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocketConnecting(TObject *Sender,
TCustomWinSocket *Socket)
{
Label1->Caption="正在连接";
Label1->Update();
}
//---------------------------------------------------------------------------
object Form1: TForm1
Left = 297
Top = 185
Width = 309
Height = 235
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 104
Top = 136
Width = 32
Height = 13
Caption = 'Label1'
end
object Timer1: TTimer
Enabled = False
Interval = 5000
OnTimer = Timer1Timer
Left = 192
Top = 32
end
end
warton
2003-10-22
打赏
举报
回复
up
gust99
2003-10-22
打赏
举报
回复
不会吧,没人想要分!
Delphi之
TCl
ient
Socket
和TServer
Socket
进行TCP长连接通讯使用KeepAlive
自动
发送心跳包检测断网
Delphi之
TCl
ient
Socket
和TServer
Socket
进行TCP长连接通讯,使用KeepALive
自动
发送心跳包检测断网,并实现断线
重连
,经测试可以及时检测到拔掉网线断网情况,具有较高的参考价值
DelphiCl
ient
Socket
断线
重连
.zip
本资料"Delphi Cl
ient
Socket
断线
重连
.zip"显然是针对在使用Delphi的Cl
ient
Socket
组件时如何处理网络中断并实现
自动
重连
这一主题的。 Cl
ient
Socket
组件是Delphi中的一个非可视组件,它实现了基于TCP协议的客户端功能...
DELPHI 从网络获取当前时间,并
自动
校对
8. 完成操作后,记得
断开
与NTP
服务器
的连接,释放资源。 在实现过程中,可能需要处理各种异常情况,比如网络连接失败、超时、数据解析错误等。同时,为了提高代码的可读性和复用性,建议将网络通信和时间处理部分...
BCB简单聊天通讯
TCP确保数据包按顺序到达,并且在传输过程中如果有丢包,会
自动
重传,确保数据的完整性。 在BCB中,TServer
Socket
和
TCl
ient
Socket
是VCL(Visual Component Library)框架中的两个关键组件,用于实现TCP通信。...
delphi 防止断网小工具
- **
重连
功能**:当检测到网络
断开
时,
自动
尝试重新连接,确保服务不间断。 4. **www.delphifans.com.nfo 文件**: - 这个.NFO文件通常包含软件的详细信息,如开发者、版权、许可证等,对于用户了解软件背景有...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章