socket telnet 不支持换行转回车换行 ?

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

万分感谢 !


...全文
1633 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cpp权哥 2009-04-23
  • 打赏
  • 举报
回复
这个转换应该由客户端来处理。我记得在windows系统下用telnet登录到自己在unix主机上写的一个服务器端的时候来自服务器端的\n也是不会变成\r\n的。
  • 打赏
  • 举报
回复
输入\r\n,能保证回车换行了吧。
lemontel 2009-04-22
  • 打赏
  • 举报
回复
telnet server应该离不开伪终端(pty)的支持
应该要使用类似openpty这样的调用
  • 打赏
  • 举报
回复
帮顶吧~`
morris88 2009-04-22
  • 打赏
  • 举报
回复
你要设置终端属性不要将"\r\n"转换成"\n"...
子晞 2009-04-22
  • 打赏
  • 举报
回复
能不能贴客户端显示的源代码看看
eyun221 2009-04-22
  • 打赏
  • 举报
回复
up............
hjh132 2009-04-05
  • 打赏
  • 举报
回复
你在client端写个函数实现"\n"转换成"\r\n",这样应该行吧?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧