- typedef struct
- {
- char name[20];
- char age[10];
- } stu;
- 發送方:
- ..............................
- stu stu1;
- strcpy(stu1.name, "myname");
- strcpy(stu1.age, "30");
- send(sock, (char*)stu1,sizeof(stu1), 0);
- 接受方:
- ..............
- recv(socka, rbuf, readlen, 0); //rbuf足夠大
- stu *stu1;
- stu1 = (stu*)buff;
- printf("myname=%s, myage=%s/n", stu1->name, stu1->age);
輸出 myname, 但stu1->age為空,沒有取到。
你能保證發送方和接收方永遠都是同樣的機器同樣的系統嗎?如果不能,就不要直接傳結構
TCP傳輸是基於流的,最好按照下面方法了定義結構
struct msg_struct{
unsigned int msg_len;
/*下面是具體的信息,可能是其它的結構,便於擴展*/
/*.......*/
}
發送端要計算msg_len的值
接收端要先接收sizeof(unsigned int)個字節,得到msg_len,然后recv(..,msg_len..)
你的msg_len傳過去有用么?對方知道你是什么endian?
俺以前做過一個項目,改造國內一個著名的系統,其中的一部分就是原設計愚蠢地在CS間使用結構進行數據傳輸,遇到big-denian就瞎了,結果俺想了一招,做了一個通用的轉換器解決了問題,省去了上千個應用程序的修改。
所以,網絡上的數據傳輸絕對禁止使用帶有2進制的結構數據,因為你不知道以后會出現什么樣的機器使用什么樣的體系,但是ASCII是不會改變的,除非你本就沒想讓自己的成果的生命期變得長久。
