我正在尝试在C中编写客户机/服务器程序以完成作业。应该发生的情况是: 连接成功 服务器等待客户端发送消息 客户端向用户询问消息,将其分配给字符串,然后将其发送到服务器。这是在客户端上的以下代码完成的: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];
'
'写(的sockfd,缓冲,BufferLength中-1)'可能是解决你的问题的最直接(和效率低下)的方式。 – WhozCraig
什么是缓冲区?一个指针?数组?你有没有malloc?放置缓冲区的声明 – texasbruce
您确实在'n = read(* newsockfd,buffer,BUFFERLENGTH -1)之前放置了'memset(buffer,0,BUFFERLENGTH);''? – alk