Socket 收发问题,搞了一天了(100)

C

c001100

Unregistered / Unconfirmed
GUEST, unregistred user!
我是笨鸟,大家多帮忙。我的client程序,定义了tshuju=record pcname:String; kahao:String; mima:String; end;并且发送 shuju.pcname:=GetHostName; shuju.kahao:=RzNumericEdit1.Text; shuju.mima:=Edit1.Text; ClientSocket1.Socket.SendBuf(shuju,sizeof(shuju));我的server改如何接收。。。如果用 Socket.ReceiveBuf 接收这个记录请各位哥哥姐姐帮忙。跪求了。
 
你这么做,根本就发不出去数据,sizeof(shuju) 的大小永远固定是 12 字节,不管你向这三个字符串怎么赋值,sizeof永远是这么大
 
s: strings 仅仅是一个指向字符串的指针而已。如果你想传字符串,请用字符数组。s: array [0..1024] of Char;
 
放飞您能不能写写收发代码,谢谢您啊
 
这样写是不对的,如果非要用string类型可以这样定义,必须指明长度 tshuju=record pcname:String[x]; kahao:String[x]; mima:String[x]; end;其中x替换成你要用到的长度,不然sizeof(shuju)怎么能知道你的这个记录的长度呢对吧[^]
 
把record的元素改为数组就么有问题了。
 
tshuju=record pcname:String; kahao:String; mima:String; end;sizeof(tshuju)应该是256*3
 
to wql 对你的回答很生气,不要乱说
 
我的client程序,定义了tshuju=record pcname:array[0..100] of char; kahao:array[0..100] of char; mima:array[0..100] of char; end;并且发送 strPCopy(shuju.pcname,GetHostName); strPCopy(shuju.kahao,RzNumericEdit1.Text); strPCopy(shuju.mima,Edit1.Text); ClientSocket1.Socket.SendBuf(shuju,sizeof(Tshuju));接收解包就可以了示范代码如下:var Len,iLength :Integer; ShuJu:TshuJu; buf :array[0..1023] of Byte;begin Len := Socket.ReceiveLength; if Len > 1024 then Len := 1024; iLength := Len; Socket.ReceiveBuf(Buf,Len); while Len >0 do begin Move(Buf[iLength - Len], ShuJu,sizeof(tshuJu)); //这里写你应该做的处理方式,代码自己写。 Len := Len - SizeOf(TshuJu); end;end;
 
顶部