telnet在发送数据时是否添加任何额外的字节?

时间:2018-09-13 15:43:01

标签: c sockets

我正在从telnet发送命令,并使用套接字命令recv()使用自己的服务器接收命令。如果我发送“ aa”,则收到的字节为4。我可以理解第3个字节为\ n,但是第4个字节是什么?

代码:

        int r = recv(my_socket_fd, message, max_buffer, 0); //r=4 when input is aa
                if(r>0) 
                    message[r]='\0'

1 个答案:

答案 0 :(得分:2)

  

我正在从telnet发送命令,并使用套接字命令recv()使用自己的服务器接收命令。如果我发送“ aa”,则收到的字节为4。我可以理解第3个字节为\ n,但是第4个字节是什么?

由Telnet实现的“网络虚拟终端”在其控制顺序(十进制字符代码)中定义了这些:

     Line Feed (LF)         10      Moves the printer to the
                                    next print line, keeping the
                                    same horizontal position.
     Carriage Return (CR)   13      Moves the printer to the left
                                    margin of the current line.

RFC 854

请注意,为了将输出位置移动到下一行的开头,需要两个字符的序列。按照惯例,这就是CR LF,但原则上也可以是LF CR(但Telnet要求CR后面不跟LF,后面跟着NUL)。这样做的结果以及telnet协议是对称的事实,是Telnet的在线线路终结器是两个字符的序列CR LF。这就是您正在观察的。