L
lncd
Unregistered / Unconfirmed
GUEST, unregistred user!
//server端我是这样写的。
procedure TForm1.ServerSocket1ClientRead(Sender:TObject;
Socket:TCustomWinSocket);
var
GetText:string;
begin
GetText:=Socket.ReceiveText;
memo1.lines.add('接收了来自:'+Socket.RemoteAddress+'的消息:'+GetText);
end;
//Client端我是这样写的。
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to strtoint(edit2.text) do//我会在edit2中填一个数字,以确定循环的次数
begin
ClientSocket1.Socket.SendText('第'+inttostr(i)+'条消息。');
//sleep(0); //加上这一句就不会丢包了。
end;
end;
//问题来了。
当edit2.text>1000时。从server的memo1中观察到会显示许多包没有被打印出来 。
我想象中应该是:
接收了来自:127.0.0.1的消息:第0条消息。
接收了来自:127.0.0.1的消息:第1条消息。
接收了来自:127.0.0.1的消息:第2条消息。
接收了来自:127.0.0.1的消息:第3条消息。
接收了来自:127.0.0.1的消息:第4条消息。
...
实际上却是:
接收了来自:127.0.0.1的消息:第0条消息。第1条消息。第2条消息。第3条消息。...
也就是说,server端一次显示了由client多次发送的消息。
而且在600左右条以后开始丢失部分消息了。
我做这个试验的初衷是想试一下当用户很多时(这种测试方法正确吗?)。会是什么情况。却得到了这样的结果。
希望这方面的行家能给我解释一下这个现象。我对socket方面不太了解。
包括与此相关的一些知识原理都可以谈。说得好我会再加分的。
procedure TForm1.ServerSocket1ClientRead(Sender:TObject;
Socket:TCustomWinSocket);
var
GetText:string;
begin
GetText:=Socket.ReceiveText;
memo1.lines.add('接收了来自:'+Socket.RemoteAddress+'的消息:'+GetText);
end;
//Client端我是这样写的。
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to strtoint(edit2.text) do//我会在edit2中填一个数字,以确定循环的次数
begin
ClientSocket1.Socket.SendText('第'+inttostr(i)+'条消息。');
//sleep(0); //加上这一句就不会丢包了。
end;
end;
//问题来了。
当edit2.text>1000时。从server的memo1中观察到会显示许多包没有被打印出来 。
我想象中应该是:
接收了来自:127.0.0.1的消息:第0条消息。
接收了来自:127.0.0.1的消息:第1条消息。
接收了来自:127.0.0.1的消息:第2条消息。
接收了来自:127.0.0.1的消息:第3条消息。
接收了来自:127.0.0.1的消息:第4条消息。
...
实际上却是:
接收了来自:127.0.0.1的消息:第0条消息。第1条消息。第2条消息。第3条消息。...
也就是说,server端一次显示了由client多次发送的消息。
而且在600左右条以后开始丢失部分消息了。
我做这个试验的初衷是想试一下当用户很多时(这种测试方法正确吗?)。会是什么情况。却得到了这样的结果。
希望这方面的行家能给我解释一下这个现象。我对socket方面不太了解。
包括与此相关的一些知识原理都可以谈。说得好我会再加分的。