从远程服务器接收垃圾字符
receiving from remote server giving junk characters?
我正在尝试编写一个telnet客户端连接到以下服务器:
198.182.241.14(宿主:pittsburgh State University, Kansas, USA) -登录:library
我已通过以下代码成功连接;
sd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sin;
memcpy(&sin.sin_addr.s_addr, host->h_addr, host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(portno);
if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
{
printf("error .. connecting socketsn");
return bRet;
}
printf("connected...n");
然后我发送"library"作为密码(据我所知,我必须输入硬编码密码)
但是在接收时,我收到了一些垃圾字符:,并且在下一次接收时它被挂起了:
char buf[2048] = {0};
send(sd, command, strlen(command),0);
send(sd, (void*)"n",2,0);
这里的命令是"library"
发送7个字节,但之后我的例外是从服务器接收一些数据:
**PSU图书馆联盟-选择要搜索的图书馆1. PSU斧图书馆目录……和更多*
我正在通过以下代码接收:
while(1)
{
memset(buf, 0, 2048);
int rv = recv(sd , buf , 2048 , 0);
printf("received %dn",rv);
if (rv < 0)
return false;
else if (rv == 0) {
printf("Connection closed by the remote endnr");
return 0;
}
buf[rv] = ' ';
printf("%sn",buf);
for(int i =0;i<strlen(buf);i++)
{
printf("%c = %d = 0x%08xn",buf[i], buf[i], buf[i]);
}
}
打印一些垃圾字符,如下所示:
ÿýÿý ÿý#ÿý'
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
= 24 = 0x00000018
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
= 32 = 0x00000020
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
# = 35 = 0x00000023
ÿ = -1 = 0xffffffff
ý = -3 = 0xfffffffd
' = 39 = 0x00000027
received 0
Connection closed by the remote end
帮忙吗?
更多编辑:任何好的文章/书籍参考/完整的代码示例-这样我就可以开始套接字编程,并通过密码成功登录telnet服务器
Thanks lot in Advance
当您连接到telnet服务器时,必须遵守telnet协议。虽然telnet连接可能看起来像纯文本发送/接收,但它实际上是一个额外的协议。每次接收到0xff时,这是一个telnet转义码。某些情况下:
- 0xff 0xff =转义0xff数据字节
- 0xff 0xfd = DO,后面跟着选项代码
所以在你的情况下,服务器发送给你一个DO(TerminalType=0x18), DO(TerminalSpeed=0x20), DO(XDisplayLocation0x23)和DO(NewEnvironmentOption=0x27)。你应该用WILL(…)或wouldn(…)来回答。在任何情况下,要获得真实的数据,您必须过滤掉telnet协议部分。
这里有一些有趣的链接给你:
- Telnet协议规范
- Telnet选项规范
- Telnet选项列表
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用 WIN RPC 发送终止的字符数组(用于将图像从客户端上传到服务器)
- 使用C 发布到服务器时,欧洲角色切换到奇怪的字符
- ESP8266网络服务器如何流式传输未签名的字符
- 错误 C2664:"发送":无法将参数 2 从"服务器问候语"转换为"常量字符 *"
- Win2003 服务器中多字符串注册表字段中的垃圾字符
- C++服务器/客户端回显某些输入末尾附加的奇怪字符
- 将文件从客户端传输到服务器时缺少字节,字节值也表示一些控制字符
- Zeromq:如何从python客户端向c++服务器发送超过30个字符的消息
- c++在服务器和客户端程序中使用字符数组
- 在从文件中读取数据并将数据发送到服务器时附加字符
- 从远程服务器接收垃圾字符
- 接收到的CSocket客户端-服务器字符串是中文字符
- C++ wxsocket TCP 服务器发送无符号字符数组,但 python 客户端再获得 4 个字节