菜鸟问一个关于socket传输自定义结构的问题,只有高手才能解答!!(100分)

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

wanglong2

Unregistered / Unconfirmed
GUEST, unregistred user!
很简单的发送和接收的程序,如果发送和接收端写在同一个程序里,就好使,分别写成两个程序,就收到的是乱码,为什么啊??<br>发送端:<br>type<br><br> &nbsp;tjl = packed record<br><br> &nbsp; &nbsp;username: string;<br> &nbsp; &nbsp;email:string;<br> &nbsp;end;<br><br> &nbsp;pjl = ^tjl;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>type<br> &nbsp;tchararray = array[0..sizeof(tjl)] of char;<br> &nbsp;pchararray = ^tchararray;<br>var<br> &nbsp;jl: tjl;<br>begin<br> &nbsp;jl.username := '王龙';<br> &nbsp;jl.email := 'w@l';<br> &nbsp;ClientSocket1.Socket.SendBuf(pchararray(@jl)^, sizeof(tjl))<br>end;<br><br>接收端:<br>type<br><br> &nbsp;tjl = packed record<br> &nbsp; &nbsp;username: string;<br> &nbsp; &nbsp; &nbsp; &nbsp;email:string;<br> &nbsp;end;<br><br> &nbsp;pjl = ^tjl;<br><br><br>procedure TForm1.ServerSocket1ClientRead(Sender: TObject;<br> &nbsp;Socket: TCustomWinSocket);<br><br> var<br> &nbsp;buf: array[0..500] of char;<br> &nbsp;len:integer;<br>begin<br> &nbsp;len:=socket.ReceiveLength;<br> &nbsp;socket.ReceiveBuf(buf,len);<br> &nbsp;edit1.text := pjl(@buf)^.email;<br>end;
 
原因大概是你的结构定义错误吧~<br>试下这样<br>type<br><br> &nbsp;tjl = packed record<br><br> &nbsp; &nbsp;username: string[20];<br> &nbsp; &nbsp;email:string[200];<br> &nbsp;end;
 
如果发送的内容大于255的话,建议定义一个PChar类型的
 
将自定义结构中的<br> &nbsp;String改成 &nbsp;arrray[0..255] of char
 
散分!!解决就散分啊~
 
我不是高手,不过你的错误实在比较低级<br><br>type<br><br> &nbsp;tjl = packed record<br> &nbsp; &nbsp;username: array[0..255] of char;<br> &nbsp; &nbsp;email:array[0..255] of char;<br> &nbsp;end;<br>发送前赋值用<br>StrPCopy(@jl.username[0], '王龙');
 
这种问题居然请高手,我等小鸟就可以解决:<br>将你的结构体种的string确定大小就OK!<br>快给分!
 
当然如果你必须声明String类型的变量<br>type<br> &nbsp;tjl = packed record<br> &nbsp; &nbsp;username: string;<br> &nbsp; &nbsp;email:string;<br> &nbsp;end;<br>则可以将其写入流中,然后再读出来
 
接受答案了.
 
后退
顶部