以下是实现代码
TSendnetMessage = Class(TObject)
private
FDataType : TSendType;
FName : String;
NewAddr : String; //ip地址
FSendData : TSendData; //新数据
NewName : String; //所打开的文件名
Newini : TiniFile;
FClient : TClientSocket;
Public //comp为组件父类的名字
Function GetIP :Integer; //从ini文件获得ip地址
Procedure SetData(Data : TSendType); //根据选择来获得数据类型
Function GetData :TSendData ;
Procedure PostData; //提交数据
Constructor Create(Comp : String ;aclient : TClientSocket);
Destructor Destroy; override;
End;
//**************************************************************************
//
// 函数: Create
// 功能: 构造器
// 参数1: Comp 机器名
// 参数2: Aclient ---TClientSocket对象
Constructor TSendNetMessage.Create(Comp : String ;aclient : TClientSocket);
Begin
inherited Create;
FName := comp;
// self.FClient.ClientType := ctNonBlocking;
Self.FClient := AClient;
Self.FClient.Host := '192.168.1.69'; //得到ip地址
Self.Fclient.Port := 886;
Self.Fclient.Active := True;
While (Not Self.FClient.Active) Do
Application.ProcessMessages;
End;//****************************************************************************
//
// 函数: GetIp
// 功能: 获得Ip
// 返回值: 0
//*****************************************************************************Function TSendNetMessage.GetIP : Integer;
Var
SAddr : string;
Begin
newname := ExtractFilePath(application.exeName)+'\ini\config.ini';
Newini := Tinifile.Create(newname);
NewAddr := newini.ReadString(FName,'ADDRESS',SAddr);
// Iport := Newini.ReadInteger(FName,'PORT',Iport1) ;
result := 0;
End;//******************************************************************************
//
// 函数: GetData
// 功能:获得发送数据
// 返回值:TSendData
//******************************************************************************Function TSendNetMessage.GetData : TSendData;
Begin
Case FDataType of
StartCL :
FSendData := FStartCL;
StopCL :
FSendData := FStopCL;
YiTao :
FSendData := FYiTao;
ErTao :
FSendData := FErTao;
SanTao :
FSendData := FSanTao ;
SiTao :
FSendData := FSiTao;
WuTao :
FSendData := FWuTao;
LuTao :
FSendData := FLuTao;
QiTao :
FSendData := FQiTao;
BaTao :
FSendData := FBaTao;
ZhenSel :
FSendData := FZhenSel;
JanHu :
FSendData := FJanHu;
ShouSu :
FSendData := FShousu;
YiZen :
FSendData := FYiZen;
ErZen :
FSendData := FErZen;
SanZen :
FSendData := FSanZen;
OneResp :
FSendData := FOneResp;
TwoResp :
FSendData := FTwoResp;
ThreeResp :
FSendData := FThreeResp;
FourResp :
FSendData := FFourResp; //四倍增益
ClosePort :
FSendData := FClosePort;
OpenPort :
FSendData := FOpenPort;
End;
Result := FSendData;
End;//****************************************************************************
//
// 函数:SetData
// 功能:发送数据
// 参数Data : TSendType
//****************************************************************************Procedure TSendNetMessage.SetData(data : TSendType);
Begin
FDataType := data;
End;//*****************************************************************************
//
// 函数:PostData
// 功能: 提交数据
//*****************************************************************************Procedure TSendNetMessage.PostData;Begin
Try
// Self.GetIP;
Self.GetData;
FClient.Socket.SendBuf(FSendData,6);
Except
On E: ESocketError do
SystemMessage(E.Message) ;
End;
End;//*****************************************************************************
//
// 函数名: Destroy
// 功能 : 析构器
//*****************************************************************************
destructor TSendNetMessage.Destroy;
Begin
Try
newini.Free; //释放ini文件
Except
On E : EIniFileException Do
SystemMessage(E.Message);
End;
inherited Destroy;
End;//*****************************TSendNetMessage*******************************//只用看构造器部分,当我有服务器端时,就不会发生标题情况,现在要解决服务器没有开户的情况,请高手指教.
TSendnetMessage = Class(TObject)
private
FDataType : TSendType;
FName : String;
NewAddr : String; //ip地址
FSendData : TSendData; //新数据
NewName : String; //所打开的文件名
Newini : TiniFile;
FClient : TClientSocket;
Public //comp为组件父类的名字
Function GetIP :Integer; //从ini文件获得ip地址
Procedure SetData(Data : TSendType); //根据选择来获得数据类型
Function GetData :TSendData ;
Procedure PostData; //提交数据
Constructor Create(Comp : String ;aclient : TClientSocket);
Destructor Destroy; override;
End;
//**************************************************************************
//
// 函数: Create
// 功能: 构造器
// 参数1: Comp 机器名
// 参数2: Aclient ---TClientSocket对象
Constructor TSendNetMessage.Create(Comp : String ;aclient : TClientSocket);
Begin
inherited Create;
FName := comp;
// self.FClient.ClientType := ctNonBlocking;
Self.FClient := AClient;
Self.FClient.Host := '192.168.1.69'; //得到ip地址
Self.Fclient.Port := 886;
Self.Fclient.Active := True;
While (Not Self.FClient.Active) Do
Application.ProcessMessages;
End;//****************************************************************************
//
// 函数: GetIp
// 功能: 获得Ip
// 返回值: 0
//*****************************************************************************Function TSendNetMessage.GetIP : Integer;
Var
SAddr : string;
Begin
newname := ExtractFilePath(application.exeName)+'\ini\config.ini';
Newini := Tinifile.Create(newname);
NewAddr := newini.ReadString(FName,'ADDRESS',SAddr);
// Iport := Newini.ReadInteger(FName,'PORT',Iport1) ;
result := 0;
End;//******************************************************************************
//
// 函数: GetData
// 功能:获得发送数据
// 返回值:TSendData
//******************************************************************************Function TSendNetMessage.GetData : TSendData;
Begin
Case FDataType of
StartCL :
FSendData := FStartCL;
StopCL :
FSendData := FStopCL;
YiTao :
FSendData := FYiTao;
ErTao :
FSendData := FErTao;
SanTao :
FSendData := FSanTao ;
SiTao :
FSendData := FSiTao;
WuTao :
FSendData := FWuTao;
LuTao :
FSendData := FLuTao;
QiTao :
FSendData := FQiTao;
BaTao :
FSendData := FBaTao;
ZhenSel :
FSendData := FZhenSel;
JanHu :
FSendData := FJanHu;
ShouSu :
FSendData := FShousu;
YiZen :
FSendData := FYiZen;
ErZen :
FSendData := FErZen;
SanZen :
FSendData := FSanZen;
OneResp :
FSendData := FOneResp;
TwoResp :
FSendData := FTwoResp;
ThreeResp :
FSendData := FThreeResp;
FourResp :
FSendData := FFourResp; //四倍增益
ClosePort :
FSendData := FClosePort;
OpenPort :
FSendData := FOpenPort;
End;
Result := FSendData;
End;//****************************************************************************
//
// 函数:SetData
// 功能:发送数据
// 参数Data : TSendType
//****************************************************************************Procedure TSendNetMessage.SetData(data : TSendType);
Begin
FDataType := data;
End;//*****************************************************************************
//
// 函数:PostData
// 功能: 提交数据
//*****************************************************************************Procedure TSendNetMessage.PostData;Begin
Try
// Self.GetIP;
Self.GetData;
FClient.Socket.SendBuf(FSendData,6);
Except
On E: ESocketError do
SystemMessage(E.Message) ;
End;
End;//*****************************************************************************
//
// 函数名: Destroy
// 功能 : 析构器
//*****************************************************************************
destructor TSendNetMessage.Destroy;
Begin
Try
newini.Free; //释放ini文件
Except
On E : EIniFileException Do
SystemMessage(E.Message);
End;
inherited Destroy;
End;//*****************************TSendNetMessage*******************************//只用看构造器部分,当我有服务器端时,就不会发生标题情况,现在要解决服务器没有开户的情况,请高手指教.
解决方案 »
- 文件夹同步怎么实现?
- 为什么一些大软件喜欢把用户数据放在“我的文档”下?
- 简单代码分析
- 一个非常神奇的问题,你遇到过吗??关于条件查询!!!真的很神奇!真的很神奇!
- 急!程序中的错误:"is not a valid floating piont value && dbgrid 如何设置焦点??
- delphi三层开发TRemoteDataModule中如何做个带返回值的函数?
- 我把xpmenu改写了,真正支持xp效果,进来看。
- 如何捕获在dbgrid中选择的行的行数。急用!
- 关于主窗体关闭时,子窗体如何关闭的问题。
- 关于Delphi的初级问题2....
- 我的ReadWorld聚合新闻阅读器2.0发布了,欢迎下载源码
- 向数据库中插入Int64的值,报“多步操作产生错误。。。”的问题。
While (Not Self.FClient.Active) Do
Application.ProcessMessages;
begin
Application.ProcessMessages;
Sleep(1);
end;
While (Not Self.FClient.Active) Do
begin
Application.ProcessMessages;
Sleep(1);
end;加成这样后系统反而会报异常
Self.Fclient.Active := True;这一句设置的成功率就这么低吗?
在OnConnecting事件里定义一个Timer
比方说每10秒去连接一次服务端,然后判断是否有返回数据
若没有则先断开SOCKET,等待下一个10秒
若楼主不知道怎么判断是否有返回数据..
可以在OnRead事件里用一行代码把Timer关闭