C 通過TCP傳送結構體

2021-04-22 15:04:20 字數 1072 閱讀 4412

在寫c#tcp通訊程式時,傳送資料時,只能傳送byte陣列,處理起來比較麻煩不說,如果是和vc6.0等寫的程式通訊的話,很多的都是傳送結構體,在vc6.0中可以很方便的把乙個char陣列轉換為乙個結構體,而在c#卻不能直接把byte陣列轉換為結構體,要在c#中傳送結構體,可以按以下方法實現:

1)定義結構體:

//命名空間

using system.runtime.interopservices;

//注意這個屬性不能少

[structlayoutattribute(layoutkind.sequential,charset=charset.ansi,pack=1)]

struct teststruct

2)結構體轉byte陣列:

//// 

/// 結構體轉byte陣列

/// 

/// 要轉換的結構體

/// 轉換後的byte陣列

public

static

byte structtobytes(object structobj)

3)byte陣列轉結構體:

/// 

/// byte陣列轉結構體

/// 

/// byte陣列

/// 結構體型別

/// 轉換後的結構體

public

static

object bytestostuct(byte bytes,type type)

//分配結構體大小的記憶體空間

intptr structptr = marshal.allochglobal(size);

//將byte陣列拷到分配好的記憶體空間

marshal.copy(bytes,0,structptr,size);

//將記憶體空間轉換為目標結構體

object obj = marshal.ptrtostructure(structptr, type);

//釋放記憶體空間

marshal.freehglobal(structptr);

//返回結構體

return obj;

}

Qt中如何通過tcp傳送結構體

前一段時間移植在想qt如何通過tcp傳送結構體,網上有人說可以通過如下方式 tcpsocket write char objecta,sizeof objecta tcpsocket read char objecta,sizeof objecta 但是我沒有成功,read有資料快取問題,所以讀過來...

c c 通過socket傳送結構體

c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定義的結構 close cfg fd printf ...

c c 通過socket傳送結構體

c c 通過socket傳送結構體 少游冰雪世界 c c 通過socket傳送結構可以直接先將結構轉化到記憶體中,再通過send直接傳送。首先,我們建立乙個結構體。struct usrdata write cfg fd,para,sizeof hd4100 rec t hd4100 rec t是自定...