2013-11-04 34 views
0

我正在UNIX中執行一個TCP套接字程序,但是當我讀取/ recv時,它總是返回相同的數據。服務器發送三層結構,我只在看第一個和超過套接字客戶端一遍又一遍讀取相同的數據

int n_aux = 1; 
    while(n_aux > 0) 
    { 
     struct trama mensajeaux; 
     n_aux = recv(socket_cliente, &mensajeaux, sizeof(struct trama), 0); 
    if(n_aux < 0) 
    { 
     printf("\nError al leer del buffer\n"); 
     return -1; 
    } 
    printf("\nMensaje recibido, tipo: %d, n: %d, v: %d, c: %d, origen: %d\n",  mensajeaux.tipo, mensajeaux.x, mensajeaux.y, mensajeaux.z, mensajeaux.origen); 
} 

回答

0

你假設你已經收到了整個結構在一個單一的讀取。你不能假設這一點。看看讀取返回的計數,並循環,直到你有你需要的。

順便說一句不要使用結構作爲網絡協議。以八位字節定義一個有線協議並編寫代碼來發送和接收它。

+0

@downvoter請解釋。 – EJP

+0

真正足夠避免錯誤,但不能解釋爲什麼OP獲得相同的結構。通常它會返回小數據的整個數據 –

+1

@BugKiller如果他只接收到結構的前綴,而不是他正在打印的內容,那麼它實際上可以完全解釋它,並且是真實的。 – EJP

相關問題