- 论坛徽章:
- 0
|
关于TCP有序传输的问题
我的意思就是说
如果是用short表示长度的话
那么选
short len;
if recv(socketid,len,2)!=2 //选接收长度
return error;
再根据长度接收内容
以下是以前写的例子
- // ---------------------------------------------------------------------------------------------
- // 从端口中读入数据包 包格式为:
- // 前两个字节是包长度,后面是包内容// param:
- // Param:
- // Socketid, target user socket id
- // Msg: the char buf to save the recv info
- // msglen: the char buf length,to prevent buf over flow
- // Sec :the time whhile wait for the msg
- // returnL -1 socket error,
- // >;0 the msg recv
- // ---------------------------------------------------------------------------------------------
- int TcpCommClass::RecvPackage (const int SocketId, char *Msg,const int MsgLen) const
- {
- fd_set FDSet;
- TIMEVAL TimeVal;
- TimeVal.tv_sec = RecvTimeout;
- TimeVal.tv_usec = 0;
- FD_ZERO (&FDSet);
- FD_SET (SocketId, &FDSet);
- if (select (0, &FDSet, NULL, NULL, &TimeVal) != 1)
- return -1;
- short recvlen,recvcount=0;
- if(recv (SocketId, (char*)&recvlen, 2, 0)!=2)
- return -1;
- if(recvlen>;=MsgLen||recvlen<=0)
- return -1;
- memcpy(Msg,&recvlen,2);
- while(recvcount<recvlen){
- TimeVal.tv_sec = 1;
- TimeVal.tv_usec = 0;
- FD_ZERO (&FDSet);
- FD_SET (SocketId, &FDSet);
-
- if (select (0, &FDSet, NULL, NULL, &TimeVal) != 1)
- return -1;
-
- recvcount+=recv(SocketId,Msg+2+recvcount,recvlen-recvcount,0);
- }
- return recvcount;
- }
复制代码 |
|