TELNET会话和TCP会话有什么不同?我有一个简单的服务器:
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(5555);
Socket socket = ss.accept();
System.out.println("Waiting for a client...");
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(sout);
out.writeUTF("\u001B[2J");
out.writeUTF("Hello client\r\n");
while (true) {
int b = sin.read();
sout.write(b);
}
}我通过telnet连接并像这样输入:

因此,我假设telnet客户端发送的数据包没有特定的报头,并且完全不更改地传递到低级协议(在我的例子中是TCP)。这是正确的吗?
发布于 2013-12-26 06:51:21
来自http://en.wikipedia.org/wiki/Telnet#Telnet_data
除0377以外的所有数据八位字节都按原样通过
传输进行传输。因此,远程登录客户端应用程序也可用于建立交互式原始TCP会话,并且通常认为这种不使用IAC (0377字符或十进制255 )的会话在功能上是identical.citation所需的。然而,由于存在其它网络虚拟终端(NVT)规则,例如要求后面跟着空(ASCII0)字符的空回车符(CR,ASCII13),这些规则将远程登录协议与所需的原始TCP区分开来。另一方面,许多系统现在拥有真正的原始sessions.clarification客户端,例如UNIX上netcat或socat和Windows上的PuTTY,它也可以用来在没有专门的客户端软件的情况下手动地与其他服务“对话”。尽管如此,远程登录有时仍然用于调试网络服务,例如SMTP、IRC、HTTP、FTP或POP3服务器,以向服务器发出命令并检查响应,但在所有这些协议中,只有FTP真正使用远程登录数据格式。
Telnet与原始TCP会话的另一个不同之处在于,Telnet在默认情况下不是8位干净的。可以协商8位模式,但在请求此模式之前,高位设置的二进制八位数可能会乱码,并且在非Telnet连接中显然不会请求此模式。8位模式(因此称为二进制选项)旨在传输二进制数据,而不是字符。有人试图引入像HTTP一样的可切换字符编码支持,3但对它的实际软件支持一无所知。
我想输入更多,但维基百科已经很好地覆盖了它:)
发布于 2013-12-26 06:52:40
Telnet是服务的名称。TCP是将计算机连接在一起的协议,用于可靠、有序、差错地传送流。
https://stackoverflow.com/questions/20777385
复制相似问题