关于delphi7如何解决idtcpserver 的CurrentReadBuffer的阻塞问题
如题,在indy 编程中,我需要用服务端接收多个客户端的信息,并根据客户端信息返回不同的结果
with AThread.Connection do
begin
try
//EnterCriticalSection(CS);
Tmpstr:=CurrentReadBuffer;
AThread.Synchronize(Addtmpstr);
if iRet >= 0 then
begin
Writeln(inttostr(iRet));
end
else
begin
writeln('匹配失败或非法数据');
end;
// LeaveCriticalSection(CS);
tmpstr,iret为全局变量,iret在addtmpstr中被赋值(与tmpstr值有关),如果不设临界区的话就会出现多个线程之间相互干扰的现象(不如客户端1收到的是本应该是2的值),如果设临界区的话(把//打开),如果其中一个客户端只建立连接而不发送数据的话,线程就会阻塞在Tmpstr:=CurrentReadBuffer;这里,临界区无法释放,其他客户端就无法与服务器交流。
with AThread.Connection do
begin
try
//EnterCriticalSection(CS);
Tmpstr:=CurrentReadBuffer;
AThread.Synchronize(Addtmpstr);
if iRet >= 0 then
begin
Writeln(inttostr(iRet));
end
else
begin
writeln('匹配失败或非法数据');
end;
// LeaveCriticalSection(CS);
tmpstr,iret为全局变量,iret在addtmpstr中被赋值(与tmpstr值有关),如果不设临界区的话就会出现多个线程之间相互干扰的现象(不如客户端1收到的是本应该是2的值),如果设临界区的话(把//打开),如果其中一个客户端只建立连接而不发送数据的话,线程就会阻塞在Tmpstr:=CurrentReadBuffer;这里,临界区无法释放,其他客户端就无法与服务器交流。
...全文
相关推荐
IdTCPServer接收发送字符串各种方式
7.
Delphi 7 中用Indy开发Socket应用程序
Delphi 7 中用 Indy 开发 Socket 应用程序Delphi 7 中用 Indy 开发 Socket 应用程序是基于 Indy 组件的 TCP Socket 应用程序的开发指南。
idtcpserver文件传输xe7PC端及手机端
【idtcpserver文件传输xe7】是一个用于在PC和手机之间进行文件传输的解决方案,它基于TCP协议,可能集成了先进的数据压缩和错误校验机制,以确保文件传输的高效性和准确性。
Delphi 中TcpServer和TcpClient用法
这种特性在 Delphi 7 中特别有用,因为它允许更精细的任务调度,减少了上下文切换的开销,从而提高了效率。综上所述,Delphi 提供了丰富的工具和支持来帮助开发者高效地实现网络通信功能。
INDY 10 的idTCPSERVER 和idTCPCLIENT 通讯的例子
7. **多线程考虑** - 如果 `idTCPServer` 需要同时处理多个客户端,你可能需要将 `OnExecute` 事件处理程序放入新的线程中,以避免阻塞服务器。8.


网络通信/分布式开发
