怎样管理与服务器连接的每一个客户端连接!(300分)(100分)

  • 主题发起人 主题发起人 zhongnuo
  • 开始时间 开始时间
你们说的方法 我都试了 不能用 请大家帮忙做个 演示 发到我的信箱 好吗?
我的信箱是
zhongnuo@263.net,cn
 
在窗体中放置一个serversocket、combobox、edit和button,设置serversocket的port和
active为true。

ServerSocket1ClientConnect事件:
ComboBox1.Items.Add(IntToStr(Socket.SocketHandle)); //或存放在全局变量里
还可以登记更多的信息,作为发送消息时的条件判断。

button的onclick:
Sock:TCustomWinSocket;

Sock := TCustomWinSocket.Create(StrToInt(ComboBox1.Text));
Sock.SendText(Edit1.Text); //send message
//other statements
Sock.Close;
Sock.Free;

我现在用d7,不太方便做(d7没serversocket了),这是用cb做的demo,应该是可以的。
 
Server端是阻塞还是非阻塞
 
如果用线程的话,要用线程组塞。
根据经验,线程组塞对处理大量的操作时效果回好一点。
 
我的方法大体同:boyface。
建一个
type
PCInfo = ^TClientInfo;
TClientInfo = record
Socket: TCustomWinSocket;
Host: string[20];
IP: string[15];
Name: string[15];
ConnTime: TDateTime;
Ctype: string[8];
end;
再定义一个CList:TList的芒全局变量。
在ServerSocket1接受ClientSocket1的连接时,建一PCInfo ,赋上值,然后加入CList中。
再规定Client连接后发送用一些登录信息,通过PCInfo中Socket信息在CList中定位PCInfo,
将有用的登录信息更新到PCInfo中。
再将Clist显示在树或ListView中,要发消息或断开只要对树或ListView的item操作即可。

此方法已成功运作2个多月了。

 
后退
顶部