我用idTcpServer和idTcpClient开发一个程序,有10几个客户端用writeln()实时向服务器发送字符串,最后基本上会同时向服务器发送一个字符串,现在的问题是:在程序运行期间服务器端经常在OnDisconnect事件里检测到有客户端断线,并且在最后客户端同时传一个字符串上来时经常会有个别客户端的信息接收不到
请问这是怎么回事,是Indy的问题吗?
请问这是怎么回事,是Indy的问题吗?
解决方案 »
- stream中有一个字节是整数,我想把它读出来,放进一个integer变量中,怎么做?
- class reference type是个什么东西?
- 自定义函数 求 斐波那契数列 (利用2个函数实现)23号之前急要!
- 关于事务方面的问题
- 郁闷.刚刚抢分抢的头晕...散....
- ActiveX中如何实现控件退出前的清理工作
- 送分:我想选中DBGIRD1中的一行,通过按钮的onclick 把它添加到另一个DBGIRD
- Delphi从数据库中读Word文件
- A very simple question!!
- 回答小问题送分!!
- delphi在DCOM的客户端连上中间服务器后,怎样实现多表操作的事务控制
- 大家来绕口令
关于发送数据的函数代码如下:
procedure TForm1.SendData( l:string);
var Data:string;
begin
Data:=l;
try
TCPClient.writeln(Data);
data:='';
except
TCPClient.Disconnect;
TCPClient.Host:=HostName;
try
TCPClient.Connect(200);
SendData(Data);
Data:='';
except
Application.MessageBox('TCP连接失败',MB_TOPMOST+MB_ICONExclamation);
end;
end;
end;
procedure TForm1.SendData( l:string);
begin
try
TCPClient.writeln(l);
except
application.messagebox('发送信息失败!','提示');
end;
procedure TForm1.ConnectServer;
begin
TCPClient.Host:=HostName;
try
TCPClient.Connect(200);
except
TCPClient.Disconnect();
Application.MessageBox('TCP连接失败,主机无响应','提示');
end;
end;
end;
procedure sendinfo();//发送信息的处理单元
begin
ConnectServer;
SendData(edit1.text);
end;
个人见解,仅供参考!
从代码的逻辑上看,你写的代码和我写的差不多,我也是把连接和发送分离了,只不过用了一个递归在发送的时候如果出现异常,用了一个递归断开并重新连接,然后再次尝试发送数据。
在网上看到一篇文章说发送字符串的时候如果字符串长度超过255就会出现错误,不知道是不是有这个问题。
最好采用确认机制
即用SendCmd方法
AThread.Connection.WriteLn('200'); //客户端发送代码是 tcpClient.sengcmd(data,200);
//***********************************//这里是一些数据处理的代码//**********************************