有关在多连接中TServerSocket接收数据后回应客户端的问题(100分)

  • 主题发起人 主题发起人 redbirdli
  • 开始时间 开始时间
R

redbirdli

Unregistered / Unconfirmed
GUEST, unregistred user!
我在ServerSocket的 ClientRead中将数据接收并交由另一组件处理(并等待其回传返回值,
此时第二、三...个连接可能已经出现,当我得到返回值时,我要将它原路返回给客户端
socket,我如何知道我送给哪一个呢?Socks.Socket.Connections[0].SendText('ack'+stmp);
Connections参数写0显然是个错误,但也不能用ActiveConnections(连接的count)啊!我
如何在ClientRead知道这是谁给我的,我还要回发给它呢! (我用的是非阻塞模式)
 
1)定义type
TypeClient=record
ScoketNo: shortint;
Name: String;
end;
在ServerSocket的Accept被触发时,记录与服务器连接的客户名及相应的Connection号;
2)在发送数据时根据客户名,查找Connection号;
3)发送数据。
4)注意:在某一客户端关闭时,及时更新你的Client信息。
For i:=0 TO intTotalClient-1 Do
Begin
If (Client.Name=strClientName) then
begin
ClientNo:=i;
Exit;
End;
End;
For i:=ClientNo+1 To intTotalClient-1 Do
Begin
Client[i-1].Name:=Client.Name;
Client[i-1].ScoketNo:=Client.ScoketNo;
End;

 
你为每一个ClientSocket都开一个Thread,这样你就无需关心ServerSocket
该给那个ClientSocket回复.
具体点就是:ClientSocket连接服务端ServerSocket时,产生一个SocketThread,
ServerSocketThread内有一个ClientSocket对象,就是用来和客户端的ClientSocket
进行会话的.
 
你就采用阻塞模式是最适合你了!我写了个http server明天给部分原代码!
 
doublefishrhy:我太笨,您还得说详细些,最好贴源代码出来,我很急,没时间自己试了!谢谢!
 
另外两位也请将阻塞模式下的做法详细道来,鸟儿没做过,多谢了!
 
dcsdcs:
也发一分给我,谢谢
maochan@263.net
 
用ICS不是太简单了,返回时直接用client.sendstr()就行了。何必用BUG满天飞的delphi
自带控件
 
猫,你可以这样处理,

!)

Var
arrary or mysocket[0..100] :handle ;

procedure ServerSocketClientRead(Sender: TObject; Socket: TwinSocket);
begin
mysocket[0]:=socket.handle;
...
...
end


2)
serversocket 也可以直接用
socket.sendtext()
 
client read里面的socket参数就是client的socket。如果你在client read里面等待可以直接用这个socket发回去,否则的话,可以把这个socket传送给发送返回值的函数。
 
保存Clientsocket的handle到服务器的一个数组中,我有在做这样的东西,不过问题还有
很多,最重要就是效率和在多个应用服务器之间的通讯问题。呵呵。。。你可以去下那个
实景聊天的原代码来看,到处都是哦。。。
 
我在ServerSocket的 ClientRead中将数据接收([:)]把是那个Socket收到的数据的信息做为指针一起传过去就好啦[:)])并交由另一组件处理(并等待其回传返回值,
此时第二、三...个连接可能已经出现,当我得到返回值时,我要将它原路返回给客户端
 
后退
顶部