对不起,我的上一条帖子不对,很晚才可以= S
但是基本上我在发送我创建的缓冲区时遇到了问题。只需要知道我要去哪里出错=(或是否有更好的方法。
------客户端发送用户名-------
int bufferSize = 32;
char messageBuffer[bufferSize];
char* message;
if (userName.size() > 8)
{
cout << "Invalid username : Greater than 8 characters" << endl;
}
else
{
switch(regType)
{
case(REGISTER):
{
cout << "Registered name: " << userName << endl;
messageBuffer[0] = 1;
messageBuffer[1] = 0;
for (int i = 2; i < (userName.size() + 2); i++)
{
messageBuffer[i] = userName[(i - 2)];
}
for (int i = 0; i < (userName.size() + 2); i++)
{
cout << messageBuffer[i];
}
cout << "<<<< messageBuffer " << endl;
message = &messageBuffer[0];
cout << messageBuffer << endl;
//message[(userName.size() + 2)] = '\0';
int messageLen = userName.size() + 2;
if (send(sock, messageBuffer, messageLen, 0) != messageLen)
DieWithError("send() send an invalid name");
}break;
case(UNREGISTER):
{
}break;
}
}
-----------服务器(接收方)------------
char msgRcvBuffer [RCVBUFSIZE];
int recvMsgSize;
如果((recvMsgSize = recv(clntSocket,msgRcvBuffer,RCVBUFSIZE,0))DieWithError(“recv()failed”);
msgRcvBuffer [recvMsgSize] ='\ 0';
字符串msgType(msgRcvBuffer);
cout <
无效handleReg(字符串消息,int套接字,字符串ipAddr)
{
// Remove the Prefix
int startIndex = 2;
// Get the username from the message
string userName = message.substr(startIndex, message.size() - startIndex);
cout << "Username " << userName << endl;
出于某种原因,我的消息字符串仅为1 ... = S我试图做的只是从客户端发送的消息中获取消息。我只是尝试从缓冲区的开头删除“1”和“0”。 1和0不是字符。
非常感谢大家的帮助=)
最佳答案
从char*
到string
的转换将字符串视为以null结尾的字符串。这里似乎不是这种情况–特别是您的char
数组似乎包含0个字符,因此该字符串将在此位置被截断。
为了避免这种情况,您需要将有效范围的字符传递给string
构造函数,以代替开始指针:
msgType = string(msgRcvBuffer, msgRcvBuffer + recvMsgSize);
关于c++ - 我的缓冲区包含元素,但没有被打印,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1695999/