Server Client该使用那种方式?(100分)

  • 主题发起人 主题发起人 linuxping
  • 开始时间 开始时间
L

linuxping

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:
Server是一个Http服务器,它有有公网IP.
Client是用户,他可能处在局域网,没有公网IP.
任务:
Server收集Client发过来的数据,保存到数据库.
Server可以向Client发送命令.

Client自己上报数据,或回应Server的命令.

我目前想用 Midas+TidUDPClient+TidUDPServer.
如果是Client上报数据,则直接使用Midas保存到服务器的数据库中.
如果是Server发送命令或Client回应命令,则使用indy.然后保存到数据库.

这样好吗?有更好的设计吗?
希望得到你的帮助.
 
这么多人看,怎么就没一个人给点建议?
 
你是用Delphi做吗?
RemObject SDK完全符合你的开发要求,它有广播消息的功能,支持Server向Client发送消息命令。
 
RemObject SDK 我只听说过,没有用过.用它开发恐怕有障碍.

还有其它人给建议吗?
 
做程序的要有研究精神
不去研究当然做不好事情
 
SERVER是个HTTP服务器,你当它能广播啊!哈摸想吃天饿肉啊!
 
具体设计还与你数据量的多少、连接数目的多少有关
 
to ccxxzz: server是个http服务器,是我公司的服务器,俺可以全权操作它,可以在上面放个Server端程序.

我的问题主要是:
Server端的ip,port是固定的,而且有公网IP.

client端处在一个局域网中,port是不固定.

server(ip 112,202.12.15 port 5123)
|
|
|
------------
/ / /
/ / /
client1 client2 client3


我在client端放一个UdpClient,一个udpServer.
client端的UdpClient向 Server发送一个信息后, server接收到信息,server向UdpClient使用的IP,Port发送一个回应消息. client端的 udpServer等待Sever端发过来的回应信息.

我的代码是这样的:

Strm.WriteBuffer(Msg,MSGLen);
try
FUDPClient.Active:=True;
FUDPClient.SendBuffer(Strm.Memory^,MsgLen);
if FWaitReturn then
begin
FUDPServer.DefaultPort:=FUDPClient.Binding.Port;
FUDPClient.Active:=False;
FUDPServer.ReceiveTimeout:=TimeOut;
FUDPServer.Active:=True;
FUDPServer.ReceiveBuffer(FReturnMsg,RetMsgLen);
end;
except
ErrorOccur:=True;
end;

请指教! 这样对吗?
 
你的意思是独立IP的公网机器做SERVER,使用UDP协议与各个客户端进行通信,如果不存在SERVER主动发信或者各个客户端进行通信,那么请注意客户并不需要UDP-SERVER这个UDP组件!而你的CLIENT部分代码带有各个CLIENT相互通信的含义,则必须使用NAT穿透,具体代码可参考UDP穿透NAT的模拟QQ通信代码!
 
后退
顶部