最近在調程式的時候,發現傳送端傳送乙個119136個char的記憶體的時候,在接收端不能全部接收,
於是,通過除錯發現,必須在接收端多次的recv以後,進行拼接:
**如下:
char lenbuf[4];
int ilen;
//接收資料
int bytes;
//先接受前面的四位訊息體長度
if((bytes=recv(clientsocket,lenbuf,sizeof(lenbuf),0))==socket_error)
else }
//這個長度包含了前面接收的4個byte的長度
//用於放內容的長度
memcpy( &ilen, lenbuf, sizeof(ilen) );
char *buf=(char *)malloc((ilen+1)*sizeof(char));
//第二次接收的話,就從下面的buf開始了,已經拋掉了buf長度的
//如果資料報很大的話,需要多次recv
int irecv =0;
if((bytes=recv(clientsocket,buf,(ilen+1),0))==socket_error)
else
else}}
TCP協議下的recv函式
recv函式 函式原型 int recv socket s,char buf,int len,int flags 功能 不論是客戶還是伺服器應用程式都用recv函式從tcp連線的另一端接收資料。引數一 指定接收端套接字描述符 引數二 指明乙個緩衝區,該緩衝區用來存放recv函式接收到的資料 引數三 ...
TCP通訊,recv接收資料需要注意的地方?
關於tcp通訊中,recv函式接收資料大小的問題,之前一直覺得,只要是客戶端與伺服器一發一收的模式,那麼recv接收的資料大小一定是函式中指定的資料大小。這次寫了客戶端與伺服器通訊的程式,在這上面栽了乙個大跟斗。程式功能如下 通過客戶端與伺服器的通訊,實現檔案的傳輸,客戶端每次傳送1k的資料,伺服器...
深入剖析TCP協議的send與recv
深入剖析tcp協議的send與recv 一 滑動視窗的概念 tcp資料報的tcp頭部有乙個window欄位,它主要是用來告訴對方自己能接收多大的資料 注意只有tcp包中的資料部分占用這個空間 這個欄位在通訊雙方建立連線時協商確定,並且在通訊過程中不斷更新,故取名為滑動視窗。有了這個字段,資料傳送方就...