从套接字读取字符串时,不会打印第一个字符

时间:2013-10-03 15:15:13

标签: c linux sockets character-encoding

来自用户的输入是插入'缓冲'。

代码

while(1)
 {
     puts("\n#listening");

     puts("#Enter your message:");
     fgets(buffer,255,stdin);
     int n = write(s,buffer,strlen(buffer));// char buffer[512];
     printf("\n>> Writing to server: %d bytes",n);

     int r = read(s,buffer,strlen(buffer));
     if(r > 0)
     {
             printf("\n>> Reading from server: %d :%s",r,buffer);
     }
 }

输出

#listening
#Enter your message:
Hello World!

>> Writing to server: 13 bytes
>> Reading from server: 12 :ello World!

如您所见,第一个'H'未打印。

2 个答案:

答案 0 :(得分:1)

此代码存在问题,但它们都不会丢弃收到的消息中的第一个字符。

它是套接字远端的“服务器”程序,负责丢失字符。

答案 1 :(得分:-1)

  1. 尝试将“\ n”放在printf()语句的 end 上,它更干净,可以帮助您进行调试。
  2. 你也在发送换行符,这就是为什么write()有13个字节的原因;这可能会搞砸你在控制台上打印的方式。
  3. 总而言之,我认为你得到了“H”,但是你没有正确打印出来。