我的代碼有一個問題,我完全不明白。以下是服務器上的代碼:
usr = uslist_return(& users,i);
if(usr != NULL)
{
send(client,usr,sizeof(usr),0)。
//Some extra code。
}
else; /Some extra code }
{
utmp.userid = -1;
send(client,&utmp,sizeof(utmp),0)。
}
以下是客戶端的代碼:
recv(sock,tmp,sizeof(tmp),0) 。
if(tmp-> userid > 0)
{
//Some Codeelse /Some Code }
{
//Some other code !
}
這里的問題是,盡管我檢查了send()沒有發送NULL指標,但send()發送的指標最后還是NULL。也許這來自于recv()。我沒有絲毫的想法。
忽略 uslist_return(...) 。它只是一個回傳指標的函式。而utmp與usr的型別相同(但不是指標)。
編輯:服務器發送的資訊與usr相同。
編輯:服務器在if括號內發送一個指標,在else括號內發送一個結構。當服務器發送指標usr,而客戶端得到它并將其保存在指標tmp中時,問題就出現了(相同型別的指標)。由于這個原因,我還沒有檢查else的情況。
編輯2:感謝Martin James的評論。看起來recv()回傳-1。Perror顯示錯誤是Bad Address。我不知道這是什么情況。
uj5u.com熱心網友回復:
看來你混淆了用戶的數量,比如27,和變數usr的大小,比如8位元組。send()引數len是你要發送的位元組數。 如果每條記錄的大小一致,那么就是count * sizeof(record),否則你需要對每條記錄的大小進行加總。
此外,正如你所暗示的,發送指標通常沒有意義,因為服務器和客戶端使用不同的地址空間。
檢查send()和recv()的回傳值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315439.html
標籤:
下一篇:指向c源檔案中的指標的指標
