多个客户端同时对一个SERVERSOCKET进行操作会不会出错?
(使用非阻塞方式)
举个例子:
N个客户端同时象一个服务器端写信息,服务器的功能是把收到的信息发送到一个固定的客户端上,会不会出现丢包,混包的现象!!!
最好能举个例子或给点代码!
(使用非阻塞方式)
举个例子:
N个客户端同时象一个服务器端写信息,服务器的功能是把收到的信息发送到一个固定的客户端上,会不会出现丢包,混包的现象!!!
最好能举个例子或给点代码!
解决方案 »
- 深圳软件公司招聘Delphi高级工程师
- 怎样用SQL Server+FR3设计主从报表?
- 如何画类似photoshop中的蚂蚁线,急急急!
- 在禁止PING的情况下,如何得知与目标机器是否正常连接?
- 数据集之间的COPY
- zswangII(伴水清清),其他有写过控件copy的朋友们请进来……
- 谁有《Delphi 6 彻底研究》,作者: 陈灿煌 ;的电子书,急需看一下!!!
- 关于fastreport2.4的一个小问题,在线等,,
- 类似QQ或360的皮肤控件
- 这个filter为何过滤不了?一个下午,搞死了
- 终于看到星了,高兴散分(五)
- "function AddChildObject(Node: TTreeNode; const S: string; Ptr: Pointer): TTreeNode; "中第三个参数是什么意思?
procedure Tgsmform.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
PackLen: Integer;
LenStr, VerStr, HeadStr: string;
PackageStr: AnsiString;
begin if Socket.Receivelength >= 7 then
begin
Socket.Receivebuf(Inbuf[1], 7);
HeadStr := '';
HeadStr := GetStr(@Inbuf, 7);
//...省略了部分代码
end
else
begin
Exit;
end; //如果经过三次检测后,数据包还没有完整地到达,则关闭连接
if Socket.ReceiveLength >= PackLen - 7 then
begin
Socket.Receivebuf(Inbuf[8], PackLen - 7);
PackageStr := '';
PackageStr := GetStr(@InBuf, PackLen);
AddPackage(PackageStr, PackageHeadP, Socket);
end
else
begin
//Sleep(100);
if Socket.ReceiveLength >= PackLen - 7 then
begin
Socket.Receivebuf(Inbuf[8], PackLen - 7);
PackageStr := '';
PackageStr := GetStr(@InBuf, PackLen);
AddPackage(PackageStr, PackageHeadP, Socket);
end
else
begin
if Socket.ReceiveLength >= PackLen - 7 then
begin
Socket.Receivebuf(Inbuf[8], PackLen - 7);
PackageStr := '';
PackageStr := GetStr(@InBuf, PackLen);
AddPackage(PackageStr, PackageHeadP, Socket);
end
else
begin
Socket.SendText('DATAERROR3');
Socket.Close;
Exit;
end;
end;
end;
end;
这里的服务器端在接收到客户端的信息后,马上把它打包放入一个队列中,然后由后台线程对其进行处理。这样做是为了让ServerSocket及时接收客户端的信息。
如果是多个客户端同时操作的话好像没什么问题!
type
Tmytest = class(TThread)
private
socket:TCustomWinSocket;
s:string;
protected
procedure Execute; override;
public
procedure send(var s:string);
end;
开一个线程正常,多了就~!◎#¥%……了!
已经能够让你很好的完成你需要的操作,问题是你具体如何处理。