如何在使用Tlientsocket与Tserversocket的C/S程序中发送与接收一个数组?(200分)

  • 主题发起人 主题发起人 atomy
  • 开始时间 开始时间
A

atomy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在使用Tlientsocket与Tserversocket的C/S程序中发送与接收一个数组?

数组里包含着用户的各种数据,请给出源代码.急需高手帮解决此问题.我已经找了几天了,
再不完成的话,我的新工作就泡汤了. 帮帮我吧.大富翁的高手们.

 
我的笨方法:
传送的时候,将多个文本以"@"隔开,然后server端将"@"隔开的各个项目写入数组
 
使用Stream来传送,
先把数据内容写到MemoryStream,然后传送,接收后解析回来就行了。
往流里写和从流里读的顺序要一致,自己控制好了。
 
TO: 风之彼端
我现在用的就是这笨办法,不过这样传送的字符串好像只能有255的长度.

TO:GanQuan
能不能把源代码给出来? 光说理论我不懂.
 
CommunicateRec = record
arrCount:Integer;
arrInfo: array[0..9] of STring[20];
end;


发:
var
sComm:CommunicateRec

sComm.arrInfo[0]:=0;
sComm.arrInfo[1]:=1;
.
.
.
sComm.arrInfo[9]:=9;
sComm.arrCount:=9 //实际数组大小

Server.SendBuffer(sIP, sPort, sComm, SizeOf(sComm));


Client.ReadBuffer(sComm, SizeOf(sComm));
for i:=0 sComm.arrcount do
showmessage(scomm.Arrinfo)
 
element,你用的是socket还是DCOM?
能不能把可以执行的源代码发一份我? driver@yeah.net
我照着你上面的代码去改,运行不了.
 
atomy:
我的程序很大,不好剥离。请直接告诉我你的问题。我会帮你解答的。
我用的是d6 indy 的Socket. 可以给我发mail:emt@263.net
 
我使用的是D5的Tclientsocket与Tserversocket,现在是只能传递一个字符串,然后我自己
定义一个协议把字符串切成几个块来存放数据,但是我觉得一个是麻烦,别一个是放的内容
也不是很多,所以就想找出一个方法能传递数组. 我使用了你给的部份源代码, 可是出错.
不知道是不是我定义时出错,所以希望能得到再详细些的源代码.
 
没有那么麻烦吧?

//客户端(发送数组代码):
void __fastcall TClientForm::Button2Click(TObject *Sender)
{
const int dim = 2048;
int ar[dim],rs,sz;
for (int i=0; i<dim; i++){
ar = i;
}
sz = sizeof(ar);
rs = CliSock->Socket->SendBuf(&ar, sz);
if (rs>=sz){
ShowMessage("发送成功!");
for (int i=0; i<dim; i++)
Memo1->Lines->Add(IntToStr(ar));
}
else
ShowMessage("发送失败!");
}


//服务器端(OnClientRead事件):
void __fastcall TServerForm::SvrSockClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
const int dim = 2048;
int ar[dim],sz,rs;

sz = sizeof(ar);
rs = Socket->ReceiveBuf(&ar, sz);
if (rs>0){
for (int i=0; i<dim; i++)
Memo1->Lines->Add(IntToStr(ar));
}else
ShowMessage("接收失败!");
}
 
忘了,你大概要Delphi代码:

//客户端(数组发送代码):
procedure TForm1.Button2Click(Sender: TObject);
const
dim = 2048;
var
ar: array[1..dim] of Integer;
i,rs,sz: Integer;
begin
for i:=1 to dim do
ar := i;

sz := SizeOf(ar);
rs := ClientSocket1.Socket.SendBuf(ar, sz);
if (rs>=sz) then
begin
ShowMessage('发送成功!');
for i:=1 to dim do
Memo1.Lines.Add(IntToStr(ar));
end
else
ShowMessage('发送失败!');
end;

//服务器端(OnClientRead事件):
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
const
dim = 2048;
var
ar: array[1..dim] of Integer;
i,sz,rs: Integer;
begin
sz := SizeOf(ar);
rs := Socket.ReceiveBuf(ar, sz);
if (rs>0) then
begin
for i:=0 to dim do
Memo1.Lines.Add(IntToStr(ar));
end
else
ShowMessage('接收失败!');
end;
 
发是正常了,怎么收到的是乱码?
 
zeusangel:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1050859
 
接受答案了.
 
后退
顶部