• 主页
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
wmrwinhap 2008年01月09日
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"去显示?

万分感谢 !


...全文
975 点赞 收藏 8
写回复
8 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Linux/Unix社区
创建于2007-08-27

7058

社区成员

7.3w+

社区内容

Linux/Unix社区 应用程序开发区
社区公告
暂无公告