使用PuTTY连接Winsock服务器时提示Invalid padding length错误
问题根因与解决方法
核心报错原因:PuTTY连接协议选择错误
你当前实现的是裸TCP协议的回显服务器,没有内置SSH协议的处理逻辑,但PuTTY默认新建会话时使用SSH协议进行连接:
- SSH协议在TCP连接建立后,会先发送专用握手包完成加密协商、身份校验等流程
- 你的服务器直接将PuTTY发来的SSH握手包原样回传,PuTTY将回包当作SSH协议报文解析,校验失败就会抛出
Invalid padding length received packet错误并主动断开连接
解决方法:
打开PuTTY新建会话界面,连接类型选择Raw,端口填写你定义的17027,再发起连接即可正常使用回显功能。
代码存在的小bug
你回发数据的代码存在冗余发送的问题:
send(clientSocket, buf, bytesReceived + 1, 0);
recv返回的bytesReceived是实际从客户端接收到的字节数,你额外多传1个字节,会把buf中未被接收数据填充的首个\0空字符也发给客户端,属于无效冗余数据。修改为以下代码即可:
send(clientSocket, buf, bytesReceived, 0);
可选优化建议
- 可以补充
bind、listen函数的返回值校验,避免端口被占用时服务无错误提示直接运行 - 当前服务器一次仅能处理一个客户端连接,后续可改造为多线程/IO复用模型支持多客户端同时接入
内容的提问来源于stack exchange,提问作者Reaper B_G
相关产品推荐
相关产品推荐

