有几个客户端向同一个UDPserver发送消息,我怎么只能监控到一个客户端的消息,要么是这一个 ,要么就是别一个,如何同时获取到多个呀,请高手指点一下!谢谢!
解决方案 »
- 麻烦大家帮我想一个算法,关于加热顺序处理。求解。
- 互联网即时消息软件的段代划分
- 再问防止程序重复运行的问题
- RichEdit控件。如何禁掉光标?并且不让选中?如果用Enabled:=false,字体就变成灰色了,我不想让字体改变颜色。
- TDX开头的控件是什么控件啊?常用吗?哪里有下啊?还有tcooltrayicon呢?
- 如何给动态创建的组件写事件代码,help me
- 如何将一个“变量”变成一个“控件名字”?急!!!
- 我想将TCheckBox和TPan合起来做成另一个控件。怎么做?
- 我的系统打不开chm格式文件
- delphi 一次导入执行还原SQL到 mysql 问题
- Delphi 定时清理内存的方法?
- edtcomb控件
以下是UDPserver监听线程的代码,它是得到一个数据后就马上执行UDPRead。
从而也就会出现你上述所说的情况!procedure TIdUDPListenerThread.Run;
var
PeerIP:string;
i, PeerPort, ByteCount:Integer;
FReadList:TList;
begin
FReadList := TList.Create;
try
FReadList.Capacity := FServer.Bindings.Count;
for i := 0 to FServer.Bindings.Count - 1 do begin
FReadList.Add(Pointer(FServer.Bindings[i].Handle));
end;
GStack.WSSelect(FReadList, nil, nil, AcceptWait);
for i := 0 to FReadList.Count - 1 do try
if not Stopped then begin
IncomingData := FServer.Bindings.BindingByHandle(TIdStackSocketHandle(FReadList[i]));
ByteCount := GStack.WSRecvFrom(IncomingData.Handle, FStream.Memory^, FBufferSize,
0, PeerIP, PeerPort);
GStack.CheckForSocketError(ByteCount);
TCustomMemoryStream_Temp(FStream).SetPointer(FBuffer,ByteCount);
FStream.Position := 0;
IncomingData.SetPeer(PeerIP, PeerPort);
if FServer.ThreadedEvent then begin
UDPRead;
end else begin
Synchronize(UDPRead);
end;
end;
except
end;
finally
FReadList.Free;
end;
end;