各位老大,小弟现有一事相求:
是这样的,有一收银系统有四界面需动态实时刷新(c/s结构)客户端用clientsocket和
serversocket ,
1:更衣室(客人出)刷新收银界面(有两台电脑)
2:买单界面(客人买单)刷新收银界面,鞋房界面(两台电脑),更衣室界面(两台电脑);
本系统只有一前台收银系统,后台无系统,只有一数据库,和一查询统计程序;
请问我该怎么作?
用clientsocket向server发消息,server 又怎样接收,server又 怎样把消息转发到其它工作站?
是这样的,有一收银系统有四界面需动态实时刷新(c/s结构)客户端用clientsocket和
serversocket ,
1:更衣室(客人出)刷新收银界面(有两台电脑)
2:买单界面(客人买单)刷新收银界面,鞋房界面(两台电脑),更衣室界面(两台电脑);
本系统只有一前台收银系统,后台无系统,只有一数据库,和一查询统计程序;
请问我该怎么作?
用clientsocket向server发消息,server 又怎样接收,server又 怎样把消息转发到其它工作站?
例如Server收到'refresh'时就调用刷新函数。
C/S收发是这样的:
1设定C/S的IP和端口,并且都Active
2Client发送:ClientSocket1.socket.sendtext('refresh');
3Server接收:Read事件里用receivetext:=socket.receivetext;
4广播:for i:=0 to ServerSocket1.Activeconnection - 1 do
begin
ServerSocket1.socket.connections[i].sendtext('Received');
end;
B有一窗体d,当c执行完后,会修改库中一表的状态为‘预备’则d会自动将其查出并显示出来。我在c,d窗体上都放了clientsocket,serversocket,当c执行后小弟在c中写了以下代码:
procedure Tfmmultijiezhang.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
if done=true then//done为c执行后返回的为真的变量
begin
Memo1.Text:='成公';
Memo1.Lines.add(Socket.ReceiveText);
end
else
exit;
end;而d如下:
procedure Tfrmxiebu.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Active:=true;
if ClientSocket1.Socket.ReceiveText<>'' then
begin
ymdyqx.close;//刷新
ymdyqx.open;
end;
end;
都没有反应,我该怎么做?
但serversocket又该怎么写?起什么作用?
小弟初学,请多多指教
是否在后台做一程序, 用serversocket向客户端发送消息,但怎么做呢?马上给分
我的意思是:做一程序在服务器上运行,用来接收客户端的消息,并向其他工作站广播是这样的,有一收银系统有四界面需动态实时刷新(c/s结构)客户端用clientsocket和
serversocket(对吗?) ,
1:更衣室(客人出)刷新收银界面(有两台电脑)
2:买单界面(客人买单)刷新收银界面,鞋房界面(两台电脑),更衣室界面(两台电脑);
本系统只有一前台收银系统,后台无系统,只有一数据库,和一查询统计程序;
4广播:for i:=0 to ServerSocket1.Activeconnection - 1 do
begin
ServerSocket1.socket.connections[i].sendtext('Received');
end;运行时提示:Activeconnection没有定义,我该怎么做?
在服务器的后台做一个服务程序,放一个TServerSocket,用来通知客户端。所有的客户端都和这个Socket连接。当一个客户端发生改变后,向服务程序的ServerSocket发送消息,服务程序接受到消息,再把消息发送到所有的客户端进行刷新就可以了。
你的代码有问题:
procedure Tfrmxiebu.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Active:=true;////以前没有打开么,那么就不会产生ClientSocket1Read事件。
你需要做如下的代码:
客户端:
在程序开始时要打开Socket,即ClientSocket.Open;
当数据发生改变向服务器发送命令:ClientSocket.SendText('refresh');
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
var
strCmd:string;
begin
strCmd:=Socket.ReceiveText;
if strCmd='refresh' then
////////进行刷新处理
else if strCmd='...' then
///////其他命令,进行其他处理
end;服务程序端:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
strCmd:string;
i:integer;
begin
strCmd:=Socket.ReceiveText;
if strCmd='refresh' then
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
if Socket<>ServerSocket1.Socket.Connections[i] then
ServerSocket1.Socket.Connections[i].SendText('refresh');
end;
每结掉一个我就向server 发送一个消息,server 收到后就将该消息又发送到其他工作站
其他工作站收到后就刷新。
现在是这样的:结掉一个手牌号后其他工作站可以刷新,但再结掉一个后其他工作站就不刷新了
我用断点调试后发现server 是收到消息的并且发送出去了的,但工作站没反应,这是为什么?
有什么方法可以解决吗?
每结掉一个我就向server 发送一个消息,server 收到后就将该消息又发送到其他工作站
其他工作站收到后就刷新。
现在是这样的:结掉一个手牌号后其他工作站可以刷新,但再结掉一个后其他工作站就不刷新了
我用断点调试后发现server在接收第二个手牌号发来的消息后执行:
(1)
procedure Tfrmserver.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
serversocket1.Active :=true;
end;
然后再执行:
(2)
procedure Tfrmserver.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
IsServer := True;
end;
然后又跳到(1)再到(2) 最后执行
(3)
procedure Tfrmserver.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var receivetext:string;
i:integer;
begin
receivetext:=socket.receivetext;
//4广播:
for i:=0 to ServerSocket1.Socket.activeconnections - 1 do
begin
ServerSocket1.socket.connections[i].sendtext(receivetext);
end;
end;
这样对吗?还是代码或事件有问题?
这时是收到消息的并且发送出去了的,但工作站没反应,这是为什么?
有什么方法可以解决吗?