0
我有這樣的結構:結構的char *通過TCP
typedef struct pkt {
unsigned int pktid;
unsigned int pkt_leng;
unsigned int strleng;
char* str;
};
在我的代碼
我這樣做:
mystring = someFunctionWhoReturnString();
pkt* mypkt = (pkt*) malloc(sizeof(pkt));
mypkt -> pkt = htonl(C_MYPKT);
mypkt -> pkt_leng = htonl(sizeof(pkt));
mpykt -> strleng = htonl(mystring.lengh());
mypkt -> str = (char*)malloc(mystring.length());
strcpy(mypkt -> str, mystring.c_str(), mystring.length());
在此之後,如果我檢查什麼存儲在mypkt-> STR ,那裏的字符串。
但是當我收到pkt時,我得到了一些垃圾(尺寸很好),假設得到char *(包中的其餘數據到達確定)。
有一些聰明的方法來完成這項任務,而不使用char []與靜態大小?
IM在VC工作++ 2010
您不能通過網絡發送指針,並期望它們在接收端有效。你需要發送實際的字符串。 char [],而不是char *。 Fwiw,你不能可靠地發送一個結構或int。結構打包,字節順序和int中的位數也肯定會讓你陷入困境。 xml和protobuf受歡迎的原因。 –
謝謝你,很清楚。 – jsilva
不要使用結構作爲網絡協議。根據八位字節定義一個有線協議,然後編寫代碼發送和接收它。 – EJP