请教关于send和recv函数的问题
谢谢大家帮忙解答:
问题是这样的
在我的客户端,我传输时这样写的:(使用的多线程,所以下面这个是线程内方法)
void * ClientFolder::Run(void *param)
{
char snd_buf[1024];
bzero(snd_buf,1024);
vector<string>::iterator it;
for (it = folder_names.begin(); it != folder_names.end(); it++)
{
strcpy(snd_buf,(*it).c_str());
send(SocketFd,snd_buf,strlen(snd_buf),0);
//sleep(1);
cout << snd_buf << endl;
//send(SocketFd,Ok_msg,strlen(Ok_msg),0);
bzero(snd_buf,1024);
}
send(SocketFd,Over_msg,strlen(snd_buf),0);
}
服务端相应的方法如下:
void ServerFolder::RecvFolder()
{
struct sockaddr_in client_addr;
socklen_t length = sizeof(client_addr);
int new_server_socket = accept(SocketFd,(struct sockaddr*)&client_addr,&length);
if ( new_server_socket < 0)
{
printf("Server Accept Failed!\n");
exit(-1);
}
folder_names.clear();
char buffer[1024];
bzero(buffer, 1024);
while((recv(new_server_socket,buffer,1024,0))>0)
{
cout << buffer<<endl;
cout <<Over_msg<<endl;
if(strcmp(buffer,Over_msg)==0)
{
cout << buffer << endl;
break;
}
/*
else if (strcmp(buffer,Ok_msg)==0)
{
cout << buffer << endl;
continue;
}
*/
folder_names.push_back(buffer);
//cout << buffer<<endl;
bzero(buffer,1024);
}
close(new_server_socket);
}
我出现的问题是这样的,我想把folder_names里面的元素按序传送给服务端,并保存到服务端的folder_names里面,现在输出结果是这样,客户端传输时候buffer的内容没有问题:
trans1
trans2
trans3
trans4
trans5
但是服务端接收到的buffer却是下面这样的
trans1trans2trans3trans4trans5
也就是说,我通过5次send的内容却被一次recv到buffer里面了。我很疑惑,socket通讯不是一次send就一次recv吗?还有,这种情况该如何解决呢? 谢谢大家的帮忙,新手拜谢~~~