关于 SocketServer 和 SocketClient 之间传数据的问题(100分)

  • 主题发起人 主题发起人 wzca
  • 开始时间 开始时间
W

wzca

Unregistered / Unconfirmed
GUEST, unregistred user!
我先定义了一个record 再用 SocketServer 和 SocketClient 传数据
传完一看,面目全非.
我只发送 Buff,也就是一个 Char 数组,好象就很正常。。。。
程序大约是这样的
-----------------------
const
BlockLen = 100;
type
PDataPackage = ^TDatapackage;
TDataPackage = record
ID: Shortint;
Max: Word;
CurrCount: Word;
Length: LongWord;
Buff: Array [0..BlockLen-1] of Char;
end;
----------发送------------------
var
MyData: PDataPackage;
begin
New(MyData);
MyData^.ID := 1;
MyData^.Max := 10;
MyData^.CurrCount := 1;
StrCopy(MyData^.Buff,'abcdefghijklmnopqrstuvwxyz1234567890');
MyData^.Length := SizeOf(MyData^.Buff);
Socket.SendBuf(MyData, SizeOf(MyData));
Dispose(MyData);
-----------接收----------------
var
MyData: TDataPackage;
begin
Socket.ReceiveBuf(MyData, SizeOf(MyData));
ss := 'New=>ID:' + IntToStr(MyData.ID);
ss := ss + ',Max:' + IntToStr(MyData.Max);
ss := ss + ',CurrCount:' + IntToStr(MyData.CurrCount);
ss := ss + ',Length:' + IntToStr(MyData.Length);
ss := ss + #13 + 'Buff:' + StrPas(MyData.Buff);
Memo1.Lines.Add(ss);
==============================
谁来给指导一下?
 
有人看,没人理啊?( 积分:100, 回复:0, 阅读:16 )
5555555555555555555555555
 
接收时MyData换成PDataPackage类型试一下可以吗?

 
Socket.SendBuf(MyData^, SizeOf(TDataPackage));
绝对没有问题了!![:D]
 
我刚开始做的时候,两边都是用的 PDataPackage 类型。
和现在用 TDataPackage 是相同的。
感觉上,不是这方面的问题。
好象是什么手法不太对,呵呵。
 
不信,你就调试调试,我感觉你对指针和变量理解不清
我说过了,按我的改了,绝对可以通过,不能通过是你
程序的逻辑错误
 
多谢 张无忌
传的东西。至少有一部分正确了.
下面的我再去试试,应该没什么问题。
[:D]
 
张无忌,再请教一下,不知道可不可以。
-------
两边都用 指针传时,开始的一部是正确的。(PDataPackage)
Socket.SendBuff(MyData^,length);
Socket.ReceBuff(MyData^.length);
---------
我两边都改成 TDataPackage 用变量了,就100%正确了。
我不知道是为什么?
--------
还有。我刚在调试的时候发现一个问题,不知道是怎么回事。
我在两个线程里同时引用了一个unit.(在这里声明的 record)
两个线程都 New(mydata),在调试时发现,两个地址竞是一样的,我倒!!
内存混乱了吗?
 
用API试了一下,没什么问题了。send,recb很正常....
多谢 张无忌了。 :)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部