在使用DELPHI自带的 TClientSocket 和 TServerSocket 的时候怎样唯一确定一个客户端呢?(100分)

  • 主题发起人 主题发起人 星月
  • 开始时间 开始时间

星月

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想使用 TClientScoket 和 TServerSocket做一个网络应用软件。但是,我现在不明白
在有多个客户连接上SERVER后,我用什么方法可以与我想要的客户通信呢?
我知道 Socket.Connections可以与第I个客户通信。但是I是随着连接的客户的多少
而变化的。我怎么才能确定我想要连接的用户,并与其通信呢?

小弟刚接触SOCKET编程.希望各位富翁帮帮忙忙!小弟100分送上
 
来个身份验证吧,连接一成功clientsocket就发送一个身份字符串给serversocket,如果不
符合要求serversocket就断开就得了。
 
用Socket.Data来确认身份吧。
 
连接上一个用户就动态建立一个ClientSocket与其相连
 
能否给出具体的实现代码.或者相关资料,下栽地址也行.谢谢各位了。
 
能否给出具体的实现代码.或者相关资料,下栽地址也行.谢谢各位了。
 
1、自定义一个结构,用于识别你的客户端,比如:
TClientInfo=Record
Name:String[20];
IP:String[15];
note:String[100];
end;
2、用此结构定义一全局变量数组:
Data: Array of TClientInfo
3、在ServerSocketAccept事件中:
SetLength数据大小,
填写客户端信息;
Socket.Data:=Data[N];
 
谢谢TYZhang.不过我还是有些不明白。

比方说,有3个客户连接到SERVER.那么 TServerSockt.Socket.Connections[0].SendText
是和第一个连接进来的客户通信.Connections[1],和第2个连接近来的通信.我的意思是.
不关3个客户谁先连接进来。我都可以和某一个通信.我就不知道这该怎么做。
 
For I:=0 To ServerSocket1.Socket.ActiveConnections-1 do
begin
Data:=ServerSocket1.Socket.Connections.Data; //Data是定义结构
if Data.Name='ffff' then ServerSocket1.Socket.Connections.SendText('asd');
end;
 
使用client socket的Handle属性,因为每个Handle是唯一的,
还有一个方法是使用IP加端口,也是和client一一对应的。

定义一个记录(域可以有:Handle,或者IP加端口)类型。
连接时候,建立client的记录数组,记录他们的特征(Handle或者IP加端口),
通信时,每个client进来,获取他们的Handle或者IP加端口,再和已有记录数组比较。
就知道是那个ClientSocket了。
 
dcomcnfg 能解决吗?
 
TYZhang Campo,谢谢你们。我明白了。我先给你们一人50分吧.

但是,我在想.象联众那样的游戏服务器,有几万人同时连线.要是给每个客户端发信息都要FOR
循环,效率是不是太低了。有没有更好的办法呢?
 
各位大哥,帮忙呀.分再加50
 
后退
顶部