谁做过ICQ类软件,关于数据传送有两个问题求教。(50分)

  • 主题发起人 主题发起人 jinyun
  • 开始时间 开始时间
J

jinyun

Unregistered / Unconfirmed
GUEST, unregistred user!
1、ICQ类软件是否属于三层架构的数据库应用软件?其数据交换是采用UDP技术还是DCOM/CORBA技术?
2、假设采用的是UDP技术,那么客户端向服务端发出查询请求后,服务端应该以流的形式将查询结果回馈到客户端,我想问此数据流包含的是一个数据表呢,还是record变量组?
如果可以,能否给一段代码参考一下?
 
没人会吗?
 
我做过类oicq的软件。是用UDP实现三层查询返回好友结果的。
大概是用到TListString

//发送
function Tfrmmain.qqOnline(const iv_serverip:string;const iv_serverport:integer):boolean;
var myStream:TMemoryStream;
TmpStr:String;
ipport:TStringList;
begin
UDPOnline.RemoteHost := iv_serverip;
UDPOnline.RemotePort := iv_serverport;
ipport := TStringList.Create;
ipport.Values['localip'] := localip;
ipport.Values['localport'] := localport;// 关键,返回服务器的数据字段的值
myStream := TMemoryStream.Create;
TmpStr := 'QQOnline' + ipport.Text;
try
myStream.Write(TmpStr[1],Length(TmpStr));
UDPOnline.SendStream(myStream);

finally
myStream.Free;
end;
ipport.Free;
end;

//接受

procedure Tfrmmain.UDPOnlineDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var receiveStream:TMemoryStream;
TmpStr:String;
receiveData:TStringList;
begin
receiveStream := TMemoryStream.Create;
try
UDPOnline.ReadStream(receiveStream);
SetLength(TmpStr,NumberBytes);
receiveStream.Read(TmpStr[1],NumberBytes);
if Copy(TmpStr,1,12) = '2125QQOnline' then
begin
receiveData := TStringList.Create;
try
receiveData.Text := Copy(TmpStr,13,Length(TmpStr));
ShowMessage(receiveData.Values['localip']); //接收
ShowMessage(receiveData.Values['localport']);
finally
receiveData.Free;
end;
end; // end if
finally
receiveStream.Free;
end;


end;

//----------

//能给分了吧。
 
接受答案了.
 
后退
顶部