Socket傳結構的問題 |
答題得分者是:aftcast
|
比爾蓋子
一般會員 發表:10 回覆:16 積分:5 註冊:2009-03-18 發送簡訊給我 |
我知道傳送的時候可以使用下面的方式傳送
我的struct宣告是這樣的 struct data *mystruct; 過程已經有給結構一些值了,然後進入socket傳送 sendto(s, (char*)&mystruct, len, 0, (SOCKADDR*) &m_localAddress, sizeof(m_localAddress)); 但我在接收端卻接不回來 我有試過用 struct data *mystruct; recvfrom(s, buf, bufSize, 0, (SOCKADDR*) &m_localAddress, &m_receiveAddrSz); mystruct = (data *)buf; 但卻沒辦法還原傳送來的結構!! 請問我這樣的作法是否有錯??? 編輯記錄
比爾蓋子 重新編輯於 2009-03-20 11:42:55, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
比爾蓋子
一般會員 發表:10 回覆:16 積分:5 註冊:2009-03-18 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
先確定一下 bufSize >= sizeof(data)
然後再使用memcpy的方式來處理 struct data retstruct; if(bufSize >= sizeof(data)) ::memcpy(&retstruct, buf, sizeof(data)); else ... //這裡你想看看吧… 此時的 retstruct 應該會是你原來的,除非很少數的情形… ===================引 用 比爾蓋子 文 章=================== 我知道傳送的時候可以使用下面的方式傳送 我的struct宣告是這樣的 struct data *mystruct; 過程已經有給結構一些值了,然後進入socket傳送 sendto(s, (char*)&mystruct, len, 0, (SOCKADDR*) &m_localAddress, sizeof(m_localAddress)); 但我在接收端卻接不回來 我有試過用 struct data *mystruct; recvfrom(s, buf, bufSize, 0, (SOCKADDR*) &m_localAddress, &m_receiveAddrSz); mystruct = (data *)buf; 但卻沒辦法還原傳送來的結構!! 請問我這樣的作法是否有錯???
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
比爾蓋子
一般會員 發表:10 回覆:16 積分:5 註冊:2009-03-18 發送簡訊給我 |
後來我改成
傳送端 sendto(s, (char*)&mystruct, sizeof(data), 0, (SOCKADDR*) &m_localAddress, sizeof(m_localAddress)); 接收端 本來是 recvfrom(s, buf, sizeof(data), 0, (SOCKADDR*) &m_localAddress, &m_receiveAddrSz); 改成 recvfrom(s, (char*)&mystruct, sizeof(data), 0, (SOCKADDR*) &m_localAddress, &m_receiveAddrSz); 接收到的struct結果跟您說的用memcpy(&retstruct, buf, sizeof(data));的內容一樣 但他還是錯的!! 不知道為什麼?? ===================引 用 aftcast 文 章=================== 先確定一下 bufSize >= sizeof(data) 然後再使用memcpy的方式來處理 struct data retstruct; if(bufSize >= sizeof(data)) ::memcpy(&retstruct, buf, sizeof(data)); else ... //這裡你想看看吧… 此時的 retstruct 應該會是你原來的,除非很少數的情形… |
比爾蓋子
一般會員 發表:10 回覆:16 積分:5 註冊:2009-03-18 發送簡訊給我 |
自己來結案一下!!
果然是要用aftcast的方法 雖然說 一開始不是很懂前輩的意思 不過在看完對岸的文章寫出來後 回來此論壇才發現原來前輩的意思是這樣 我附上對岸比較完整的範例 http://www.9php.com/FAQ/cxsjl/c/2008/05/4301660118612.html ===================引 用 aftcast 文 章=================== 先確定一下 bufSize >= sizeof(data) 然後再使用memcpy的方式來處理 struct data retstruct; if(bufSize >= sizeof(data)) ::memcpy(&retstruct, buf, sizeof(data)); else ... //這裡你想看看吧… 此時的 retstruct 應該會是你原來的,除非很少數的情形… ===================引 用 比爾蓋子 文 章=================== 我知道傳送的時候可以使用下面的方式傳送 我的struct宣告是這樣的 struct data *mystruct; 過程已經有給結構一些值了,然後進入socket傳送 sendto(s, (char*)&mystruct, len, 0, (SOCKADDR*) &m_localAddress, sizeof(m_localAddress)); 但我在接收端卻接不回來 我有試過用 struct data *mystruct; recvfrom(s, buf, bufSize, 0, (SOCKADDR*) &m_localAddress, &m_receiveAddrSz); mystruct = (data *)buf; 但卻沒辦法還原傳送來的結構!! 請問我這樣的作法是否有錯??? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |