C# socket返回的数据怎么解析出来,请先看下我的问题

yangjing6693 2012-06-07 02:03:27
我的代码
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipa = IPAddress.Parse("172.16.10.5");
endPoint = new IPEndPoint(ipa, 6666);
socket.Connect(endPoint);
lianjie = true;
int nGetLength = 0;
nGetLength = socket.Receive(b_receivedata,b_receivedata.Length,0 );
返回的数据b_receivedata 是byte数据 每个字节都是数字

c++那边给我发的是
send(sock_client,(char*)&ms,sizeof(ms),0);(他的这些我也看不懂 ms是定的结构,他发送是吧这个结构转换成char类型发过来的)

C++定的结构
typedef struct _MemoryStatus
{
DWORD dwMemoryLoad; // 物理内存使用率
DWORD dwTotalPhys; // 物理内存总数
SIZE_T dwAvailPhys; // 物理内存可用数
SIZE_T dwTotalPageFile;// 页文件总数
SIZE_T dwAvailPageFile;// 页文件用数
SIZE_T dwTotalVirtual; // 虚拟内存总数
SIZE_T dwAvailVirtual; // 虚拟内存可用数
}
我C#这里的结构
public struct MemoryStatus
{
uint dwMemoryLoad; // 物理内存使用率
uint dwTotalPhys; // 物理内存总数
uint dwAvailPhys; // 物理内存可用数
uint dwTotalPageFile;// 页文件总数
uint dwAvailPageFile;// 页文件用数
uint dwTotalVirtual; // 虚拟内存总数
uint dwAvailVirtual; // 虚拟内存可用数
}
不知道 我这里定的结构跟C++那里统一不!!

现在是 他给我把数据发给我了,然后到了b_receivedata(byte) 里 我怎么把b_receivedata解析出来???那位能够帮帮我
...全文
306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooo7880000 2012-06-07
  • 打赏
  • 举报
回复
我一般用这个抓包工具:smartsniff
ooo7880000 2012-06-07
  • 打赏
  • 举报
回复
直接用抓包工具。抓对方发过来的数据包。这样比较直观。比较容易解析。然后把抓到的数据流导出。让大家帮你分析。
__天涯寻梦 2012-06-07
  • 打赏
  • 举报
回复
监听的话要这样写
 Socket sktlisten = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipa = IPAddress.Parse("0.0.0.0");
IPEndPoint endPoint = new IPEndPoint(ipa, 6666);
sktlisten.Bind(endPoint);
sktlisten.Listen(20);

Socket socket = sktlisten.Accept();

再接 4楼的代码
我给你发了站内信
yangjing6693 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
你是不是要监听 6666 这个端口,等待对方主动发送内容过来?
[/Quote]
对啊 他发给我数据 然后我解析出来 然后显示
__天涯寻梦 2012-06-07
  • 打赏
  • 举报
回复
你是不是要监听 6666 这个端口,等待对方主动发送内容过来?
yangjing6693 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
socket.Connect(endPoint);
这行后的接收代码如下

C# code
Type type = typeof(MemoryStatus);
int size = Marshal.SizeOf(type);

byte[] b_receivedata = new byte[size];
int len = 0;
while ((len += socket.Rec……
[/Quote]

到了 MemoryStatus obj = (MemoryStatus)Marshal.PtrToStructure(p, type); 这一步后 查看obj数据查不到
__天涯寻梦 2012-06-07
  • 打赏
  • 举报
回复
socket.Connect(endPoint);
这行后的接收代码如下
Type type = typeof(MemoryStatus);
int size = Marshal.SizeOf(type);

byte[] b_receivedata = new byte[size];
int len = 0;
while ((len += socket.Receive(b_receivedata, len, b_receivedata.Length - len, 0)) < b_receivedata.Length) ;

IntPtr p = Marshal.AllocHGlobal(size);
Marshal.Copy(b_receivedata, 0, p, size);
MemoryStatus obj = (MemoryStatus)Marshal.PtrToStructure(p, type); //obj 就是转换后得到的结构
Marshal.FreeHGlobal(p);
yangjing6693 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
这不是我发的么,刚才那帖子我不也提供了解析的代码?
[/Quote]
大哥 你qq多少 这里问太麻烦了
yangjing6693 2012-06-07
  • 打赏
  • 举报
回复
不行啊 那个 提不出来
Type type = typeof(MemoryStatus);
int size = Marshal.SizeOf(type);
IntPtr p = Marshal.AllocHGlobal(size);
Marshal.Copy(bytes, 0, p, size);
MemoryStatus obj = (MemoryStatus)Marshal.PtrToStructure(p, type);
Marshal.FreeHGlobal(p);
obj提不出来数据
__天涯寻梦 2012-06-07
  • 打赏
  • 举报
回复
这不是我发的么,刚才那帖子我不也提供了解析的代码?

110,534

社区成员

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

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

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