一个SOCKET与多线程的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 gsw
  • 开始时间 开始时间
G

gsw

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在做了个用SOCKET的程序,我这边是服务器端,现在有10个客户端给我同时发信息,socket能同时收到这10个客户端的数据,但我的服务器端是一个一个来处理这10条数据的,我想做个多线程,让它对10个客户端的数据同时处理,谁有解决办法,谢谢。
比如说我服务器端是个计算2次方的工具,客户1发过1,客户2发过2,客户3发过3,以些类推,我返回客户1为1,客户2为4,客户3为9,现在我的程序是计算完1后返回才计算2,我想这10个数据同时运算,谁选算完返回谁,请求指点!
 
我现在做了个用SOCKET的程序,我这边是服务器端,现在有10个客户端给我同时发信息,socket能同时收到这10个客户端的数据,但我的服务器端是一个一个来处理这10条数据的,我想做个多线程,让它对10个客户端的数据同时处理,谁有解决办法,谢谢。
比如说我服务器端是个计算2次方的工具,客户1发过1,客户2发过2,客户3发过3,以些类推,我返回客户1为1,客户2为4,客户3为9,现在我的程序是计算完1后返回才计算2,我想这10个数据同时运算,谁选算完返回谁,请求指点!
 
服务器用 overlapped
 
loco兄,能说的清楚点吗?我学Delphi不长时间
 
这个你就开多线程吧,开两个就够了!!
 
leaber兄,能给个例子吗?
 
各位大哥都不明的吗?
 
gsw兄,你说的服务器端一个一个得向客户端返回数据是怎么实现的?是不是第一个客户端发送一个,然后服务器接受返回,然后第二个在发送然后服务器在返回呢?.....如果这样,那只好使用多线程了,但是使用多线程你还要用来区分每个客户端,这也是一个问题!希望你三思!如果你用的是ClientSocket组件或许我还有这方面的例子,但是使用Indy 我就没办法了!
 
xue_wen兄,能否具体谈谈!
 
你的具体目标我不太清楚,但是要想区分多个客户端,以及向他们发送相应的内容你可以用如下的方法:
它区分客户端A或B是要用到多线程的。
type
PClient =^TClient;
TClient = Record
DNS:String[20];
IP: String[20];
Thread:Pointer;
end;
var
Clients:TThreadList;
procedure TInforServer.IdTCPServer1Connect(AThread: TIdPeerThread);
var
NewClient:PClient;
begin
New(NewClient);
NewClient^.IP:=AThread.Connection.Socket.Binding.PeerIP;
NewClient^.Thread:=AThread;
AThread.Data:=TObject(NewClient);
try
Clients.LockList.Add(NewClient);
finally
Clients.UnlockList;
end;
end;

procedure TInforServer.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
ActClient:PClient;
begin
ActClient:=PClient(AThread.Data);
try
Clients.LockList.Remove(ActClient);
finally
Clients.UnlockList;
end;
dispose(ActClient);
AThread.Data:=nil;
end;

然后根据取得对象的内容,来判断是否发送,及发送什么样的东西!
 
xue_wen兄,我QQ是285130205,能否细说一番?
 
兄弟,就老实用多线程吧!有空我也帮你做个!
 
后退
顶部