socket telnet 不支持换行转回车换行 ?
简易原理:
我做了个简易的telnet server在我的程序里,简单的描述原理如下:
创建一个TCP server并等待连接,如果接收到一个新的连接 sock(sock为accept返回的句柄)
将标准输入输出与这个sock绑定:
dup2(sock, 0);
dup2(sock, 1);
dup2(sock, 2);
然后从sock接收用户命令并解析(解析结果是printf输出的),希望所有printf出来的内容都能发送到客户端。
结果:程序可以工作,可以接收到客户端的命令,printf的输出也都发送到了客户端。
问题:
发送到客户端的内容不能够实现换行变成回车换行。
如 printf("aaa\nbbb\n");客户端希望两行从头对齐显示,但实际上第二行显示的位置不是行首。
原因是没有将"\n"自动转换成"\r\n"发送到客户端。
尝试办法:
按以下方法设置终端属性不起作用:
struct termios ios;
tcgetattr(0, &ios);
ios.c_oflag |= ONLCR;
tcsetattr(0, TCSANOW, &ios);
tcgetattr(1, &ios);
ios.c_oflag |= ONLCR;
tcsetattr(1, TCSANOW, &ios);
以上操作后,还是不能实现"\n"自动转换成"\r\n"
按以下方法设置socket终端属性,调用失败:
struct termios ios;
tcgetattr(sock, &ios);
ios.c_oflag |= ONLCR;
tcsetattr(sock, TCSANOW, &ios);
好象不能对socket连接去设置属性因而调用返回失败
困惑:我无法将原程序中所有printf的"\n"都手工转换成"\r\n" (部分代码是.o文件没有源码)
寻求帮助:如何能实现“\n”自动转换成"\r\n"发送到客户端,或者如何进行telnet协商使客户端收到"\n"时自动转换成"\r\n"去显示?
万分感谢 !