Python socket编程连接远程服务器发送数据后无响应问题求助
问题排查与解决
核心原因
TCP属于流式协议,绝大多数基于TCP的交互服务都会用换行符作为单条消息的结束边界。你使用Chrome的netcat插件测试时,输入内容按下回车后,插件会自动在发送内容末尾追加换行符,服务端识别到结束标记才会处理请求并返回响应。但Python的input()函数会自动去掉输入末尾的换行符,你直接发送原始输入内容的话,服务端会认为消息还没发送完成,一直处于等待状态,不会返回任何数据,最终导致recv语句持续阻塞。
修复方案
你只需要在发送内容末尾追加服务端能识别的结束标记即可,绝大多数场景下加\n即可,如果是Windows部署的服务端可以尝试用\r\n,同时建议用sendall替代send确保数据完整发送,修改后代码如下:
import socket my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 可选添加超时设置,避免一直卡住,单位为秒 my_socket.settimeout(5) my_socket.connect(("18.198.234.32", 6666)) data = my_socket.recv(1024).decode() print(data) to_send = input("enter: ") + '\n' # 追加换行作为消息结束标记 my_socket.sendall(to_send.encode()) # sendall保证所有数据都被发送 data = my_socket.recv(1024).decode() print(data) my_socket.close()
其他排查点
- 如果添加换行后还是无响应,可以先抓包确认你用netcat插件发送的内容末尾带的是
\n还是\r\n,对应修改追加的结束标记即可 - 可以打印
send的返回值,确认实际发送的字节数是否和你预期的一致
内容的提问来源于stack exchange,提问作者asaf melyas
相关产品推荐
相关产品推荐

