我正在尝试用 C 编写一个客户端/服务器程序来完成家庭作业。应该发生的是:建立连接 服务器等待客户端发送消息 客户端向用户询问消息,将其分配给字符串,然后将其发送到服务器。这是在客户端的以下代码中完成的:
while(1){
/* prepare message */
printf ("Please enter the message: ");
bzero (buffer, BUFFERLENGTH); //BUFFERLENGTH is defined as 256
fgets (buffer, BUFFERLENGTH, stdin);
/* send message */
n = write (sockfd, buffer, strlen(buffer));
if (n < 0)
error ("ERROR writing to socket");
bzero (buffer, BUFFERLENGTH);
}
现在,我的问题是这段代码发送了一些乱码。据我所知,缓冲区没有被清空,或者并不总是 BUFFERLENGTH 长,所以是从堆栈中读取随机垃圾吗?
服务器收到消息,然后打印它。如果客户端程序扫描进来,"actual string I input"
那么服务器将输出类似于:
actual string I input @&^%~&
尽管终端输出更多的是不可打印的字符,而且还有换行符。服务器的代码是:
n = read (*newsockfd, buffer, BUFFERLENGTH -1);
printf("buffer = %s\n",buffer);
if (n < 0)
error ("ERROR reading from socket");
但是,当我删除 while 循环时,这不会发生!
我读过 bzero 并且知道它已被弃用,我应该使用 memset;但是我尝试这样做,使用:memset(buffer,0,BUFFERLENGTH);
并且问题仍然存在。
关于为什么缓冲区附加了乱码的任何解释?
编辑
缓冲区通过以下方式在客户端中声明:char buffer[BUFFERLENGTH];
`