Socket如何发送和接收一个struct,求助,急切的求助,希望大家帮忙!!!!!

jhlcss 2003-10-20 02:37:55
谢谢
...全文
82 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
三杯倒 2004-03-04
  • 打赏
  • 举报
回复
// 用 Marshal 傳回類別的 Unmanaged 大小 (以位元組為單位)
int size = Marshal.SizeOf(pAskConnect);
// 使用 GlobalAlloc 配置記憶體區塊
System.IntPtr ptr = Marshal.AllocHGlobal(size);
// 從 Managed 物件封送處理資料到 Unmanaged 記憶體區塊
Marshal.StructureToPtr(pAskConnect, ptr,true);
byte[] ba=new byte[size];
// 從 Managed 陣列將資料複製到 Unmanaged 記憶體指標
Marshal.Copy(ptr, ba, 0, ba.Length );
开心就好 2003-10-20
  • 打赏
  • 举报
回复
在发送方序列化,序列化在内存中就可以了,然后发送到接收方,在接收方反序列化,注意两者所采用的编码必须要统一。
ArLi2003 2003-10-20
  • 打赏
  • 举报
回复
cc 公主的方法不错,帮你FAQ
xixigongzhu 2003-10-20
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2097/2097864.xml?temp=.162121
lbywyj 2003-10-20
  • 打赏
  • 举报
回复
这样:byte[] byteData = Encoding.GetEncoding("GB2312").GetBytes(sSend);
然后在发送byteData,如果你用tcp写的话,你接受的和你发送的是同样的序列,
即使不是同样的序列,也没关系的,在你的接受端接收到数据的话,你必须要按照发送时候定义的协议来恢复你所接收到的数据阿,
例如:sRecieve是接收到的数据:你可以这样:
string sI= sRecive.Substring(0,sRecive.IndexOf("^"));
string sS =....;
用一个循环语句,从一个字符串中按一定的条件取出各个子字符串,我想你会吧?
这样是可以实现的
jhlcss 2003-10-20
  • 打赏
  • 举报
回复
就是说,发送的时候是byte型,接收也应该是byte型,如何序列化。
jhlcss 2003-10-20
  • 打赏
  • 举报
回复
求助
lbywyj 2003-10-20
  • 打赏
  • 举报
回复
楼主:
我不知道socket是怎样发送struct,觉得实现好象也不容易,不过我是这样实现的:
定义一个函数,在send() 之前吧,比如:
public struct sss
{
int i;
string s;

}
把i和s的值都转换成string 类型,然后
定义 string sSend = sss.i.ToString()+"^"+sss.s;
这时候就可以发送sSend了;
同样的在接受端:你必须按照发送端定义的协议来恢复你的struct,其中"^",是用来界定struct里边不同类型变量;
这样时可以实现的,至于还有没有别的更好的办法,还希望大家多讨论!

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧