【发布时间】:2014-08-10 15:34:27
【问题描述】:
我正在开发一个简单的套接字客户端,它向服务器发送一个简单的字母“p”,然后从服务器读取响应。除了一个令人困惑的问题外,它正在充分发挥作用。第一次读取套接字时(它发生在循环中),数据是乱码和损坏的,结果像“ÿýÿû”和“μÞv”。在第一次响应后收到的所有数据都很好并且有效。
我用来接收的代码是:
int n;
char buffer[256];
bzero(buffer,256);
strcpy(buffer, "p");
n = write(manSock,buffer,256);
if (n < 0)
{
error("ERROR writing to management server");
}
bzero(buffer,256);
n = read(manSock,buffer,256);
if (n < 0)
{
error("ERROR reading from management server");
}
return buffer;
manSock 是套接字文件描述符。
关于为什么会发生这种情况的任何想法?
【问题讨论】:
-
除了缓冲区,你是返回长度吗?或者您是否尝试在打印之前在末尾添加“\0”?缓冲区[n] = '\0';
-
这是函数的一部分吗?如果是这样,那么返回局部变量
buffer的地址是未定义的行为。请编辑您的帖子以表明这确实是您发布的函数调用 -
另外,你可能想澄清为什么你有 C++ 标签而不是 C(只是为了消除混淆)。
-
OT:总是将
read()/write()的结果与函数被告知读/写的数量进行比较!相关:stackoverflow.com/a/24474150/694576 -
还有
read()和write()返回ssize_t而不是int。