0

我正在寻找在 Linux 平台上运行的 TFTP 客户端的示例。我正在尝试使用 boost::asio 来解决这个问题,这是代码:

void packi16 (char *buf, unsigned short int i){   //change the host order to network byte order (16bit)
i = htons(i);
memcpy(buf,&i,2);
}

int main()
{
boost::asio::io_service service;
boost::asio::ip::udp::socket sock(service);
sock.open(boost::asio::ip::udp::v4());
boost::asio::ip::udp::endpoint receiver_ep(boost::asio::ip::address::from_string("127.0.0.1"), 69);
char filename[] = "first";
char mode[] = "netascii";
int filename_size = (sizeof(filename)/sizeof(*filename));
int mode_size = (sizeof(mode)/sizeof(*mode));
char *packet;
packet = (char *)malloc((17)*sizeof(char));
packi16(packet,1); // 1 opcode for read request
memcpy(packet+2,filename,filename_size-1);
memset(packet+1+filename_size, '\0', 1);
memcpy(packet+2+filename_size, mode, mode_size-1);
memset(packet+1+filename_size+mode_size, '\0', 1);
sock.send_to(boost::asio::buffer(packet, 17), receiver_ep);
char buff[512];
boost::asio::ip::udp::endpoint sender_ep;
sock.receive_from(boost::asio::buffer(buff), sender_ep);
std::cout << buff;
return 0;
}

问题在于程序没有错误,但代码不打印任何内容,尽管在 TFTP 服务器中我有这个文件:首先。我使用嗅探器(wireshark)查看我的请求数据包中发生了什么,我在 ubuntu 的 tftp 客户端捕获数据包,然后捕获我的程序捕获,看来我的程序构建了正确的数据包。

谢谢女士,Prabhu 的评论。

4

0 回答 0