socket telet 能否实现换行自动转换为回车换行

wmrwinhap 2008-01-09 07:30:32
简易原理:
我做了个简易的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"去显示?

万分感谢 !

...全文
60 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
这个简单啊,网上搜一下就得到答案了.
回复
gettext 2008-01-09
第二行显示的位置不是行首不是"\r\n"的问题。你试过printf("aaa\r\nbbb\r\n");第二行显示的位置是行首吗?
回复
发动态
发帖子
Linux/Unix社区
创建于2007-08-27

1.8w+

社区成员

Linux/Unix社区 专题技术讨论区
申请成为版主
社区公告
暂无公告