Recv() returns 正确的长度但不要复制消息
Recv() returns the correct lenght but don't copy the message
我有下一个代码:
while(1) {
int length=sizeof(client);
connSock=accept(readSock, (struct sockaddr*) &client,&length);
if(!fork())
{
close(readSock);
char receiveBuff[1000],sendBuff[1000];
int status;
int size_buf;
do {
status=recv(connSock, receiveBuff, 1000,0);
printf("%d status \n",status);
printf("%s recv buff\n", receiveBuff);
memcpy(sendBuff,receiveBuff,sizeof(receiveBuff));
send(connSock, &sendBuff, sizeof(sendBuff), 0);
}while (status!=0);
close(connSock);
exit(0);
}
close(connSock);
}
我正在尝试发送消息 "Test"
和 recv()
函数 returns 4(正确的长度),但是当我尝试打印 receiveBuffer
它时不起作用。这是输出:
4 status
h: recv buff
这是客户端的代码:
void Client_Connector::Start_Connection()
{
this->sock=socket(AF_INET,SOCK_STREAM,0);
bzero(&this->server,sizeof(server));
this->server.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1", &this->server.sin_addr);
server.sin_port=htons(2500);
int status=connect(sock,(struct sockaddr*) &server, sizeof(server));
if (status==0)
cout<<"Sunteti conectat! \n";
else
Eroare("Eroare de conexiune! Conexiunea nu s-a putut realiza.");
}
void Client_Connector::send_Buffer(char* sendMessage)
{
int i;
i=send(sock, &sendMessage,strlen(sendMessage)+1,0);
cout<<i<<endl;
}
然后调用函数:
connecter.Start_Connection();
string sendmsg("Test");
sendmsg+="[=14=]";
connecter.send_Buffer((char*)sendmsg.c_str());
问题是你实际上并没有发送字符串,而是将指针发送到字符串:
i=send(sock, &sendMessage,strlen(sendMessage),0);
此处&sendMessage
将是指向变量sendMessage
的指针,而不是指向字符串第一个字符的指针。
简单的解决方案:
i = send(sock, sendMessage, strlen(sendMessage) + 1, 0);
这将发送实际的字符串内容,包括终止空字符。
我还建议您退后几步,刷新您对数组和指针以及相关运算符的了解。
我有下一个代码:
while(1) {
int length=sizeof(client);
connSock=accept(readSock, (struct sockaddr*) &client,&length);
if(!fork())
{
close(readSock);
char receiveBuff[1000],sendBuff[1000];
int status;
int size_buf;
do {
status=recv(connSock, receiveBuff, 1000,0);
printf("%d status \n",status);
printf("%s recv buff\n", receiveBuff);
memcpy(sendBuff,receiveBuff,sizeof(receiveBuff));
send(connSock, &sendBuff, sizeof(sendBuff), 0);
}while (status!=0);
close(connSock);
exit(0);
}
close(connSock);
}
我正在尝试发送消息 "Test"
和 recv()
函数 returns 4(正确的长度),但是当我尝试打印 receiveBuffer
它时不起作用。这是输出:
4 status
h: recv buff
这是客户端的代码:
void Client_Connector::Start_Connection()
{
this->sock=socket(AF_INET,SOCK_STREAM,0);
bzero(&this->server,sizeof(server));
this->server.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1", &this->server.sin_addr);
server.sin_port=htons(2500);
int status=connect(sock,(struct sockaddr*) &server, sizeof(server));
if (status==0)
cout<<"Sunteti conectat! \n";
else
Eroare("Eroare de conexiune! Conexiunea nu s-a putut realiza.");
}
void Client_Connector::send_Buffer(char* sendMessage)
{
int i;
i=send(sock, &sendMessage,strlen(sendMessage)+1,0);
cout<<i<<endl;
}
然后调用函数:
connecter.Start_Connection();
string sendmsg("Test");
sendmsg+="[=14=]";
connecter.send_Buffer((char*)sendmsg.c_str());
问题是你实际上并没有发送字符串,而是将指针发送到字符串:
i=send(sock, &sendMessage,strlen(sendMessage),0);
此处&sendMessage
将是指向变量sendMessage
的指针,而不是指向字符串第一个字符的指针。
简单的解决方案:
i = send(sock, sendMessage, strlen(sendMessage) + 1, 0);
这将发送实际的字符串内容,包括终止空字符。
我还建议您退后几步,刷新您对数组和指针以及相关运算符的了解。