Client端:
#define buffer 256*1024char temp[100];//
long subc;
while(1)
{
//假定temp已赋值
send(sockConn,temp,sizeof(temp),0); //这里读取传过来的buffer数据
recv(sockConn,subc,sizeof(subc),0);
recv(sockConn,buffer,sizeof(buffer),0);}
Server端:
#define buffer 256*1024char temp[100];
long subs ;
while( 1 )
{
recv(sock,temp,sizeof(temp),0); //根据subtemp的值读取磁盘中文件大小为256k数据赋值给buffer,
//其中读取方式为file.Open(filepathname, CFile::modeRead|CFile::typeBinary, NULL); send(sock,subs,sizeof(sub),0);
int sum = 0;
sum = send(sock,buffer,sizeof(buffer),0);
}现在问题是:
第一次循环:
客户端发送完temp给服务器,服务器根据temp读取数据赋值给buffer发送给客户端,
客户端接收到的字节数不是256k,而是其中的一部分。
回到第二次循环:
客户端接收的subc和buffer都是乱码。要怎么才能够保证客户端每次接收的数据正确????????
#define buffer 256*1024char temp[100];//
long subc;
while(1)
{
//假定temp已赋值
send(sockConn,temp,sizeof(temp),0); //这里读取传过来的buffer数据
recv(sockConn,subc,sizeof(subc),0);
recv(sockConn,buffer,sizeof(buffer),0);}
Server端:
#define buffer 256*1024char temp[100];
long subs ;
while( 1 )
{
recv(sock,temp,sizeof(temp),0); //根据subtemp的值读取磁盘中文件大小为256k数据赋值给buffer,
//其中读取方式为file.Open(filepathname, CFile::modeRead|CFile::typeBinary, NULL); send(sock,subs,sizeof(sub),0);
int sum = 0;
sum = send(sock,buffer,sizeof(buffer),0);
}现在问题是:
第一次循环:
客户端发送完temp给服务器,服务器根据temp读取数据赋值给buffer发送给客户端,
客户端接收到的字节数不是256k,而是其中的一部分。
回到第二次循环:
客户端接收的subc和buffer都是乱码。要怎么才能够保证客户端每次接收的数据正确????????
我调试过,就传了buffer之后,后面传过来的值就乱码了。
比如:客户端接收了第一个buffer之后,
第二次客户端在接收buffer之前的subc的值是乱码来的。
为什么会这样?????????有没有可能第一次接收的buffer,没有接收完,只是接收了一部分,就返回等待第二次接收。我看了这论坛的一些以前问的相关问题,自定义信息头,组包,粘包是怎么一回事?
然后你每次recv()得看看返回值吧?
//根据subtemp的值读取磁盘中文件大小为256k数据赋值给buffer,
//其中读取方式为file.Open(filepathname, CFile::modeRead|CFile::typeBinary, NULL);
发送端:
// 发送大小
send(sock,subs,sizeof(sub),0);
// 发送内容
send(sock,buffer,sizeof(buffer),0);
接收端:
// 接受大小
int nSize;
send(sock,nSize,sizeof(nSize),0);
char *szBuffer = new char(nSize);
// 发送内容
send(sock,szBuffer ,sizeof(szBuffer),0);