TFTP客户端没有从服务器接收到信息(发送到错误的端口)
tftp client not receiving from server (send to wrong port)
我正在编写自己的tftp客户端。客户端是用c++编写的(部分是c),运行在unix系统上(Linux Debian稳定版)。
我的问题是:
我可以将我的读取请求(RRQ)发送到TFTP服务器(Windows XP上的Open TFTP服务器)。日志含义tftp服务器收到RRQ,但是无法发送应答。
在服务器端,我看到这个消息:Client 192.168.1.110:55239 C:OpenTFTPServertest.txt, Communication Error
但是端口55239不是我在TFTP-Client中定义的端口。
下面是我的代码部分:
-
设置客户端和服务器地址:
memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(servport); // servport=69 servaddr.sin_addr.s_addr = inet_addr("192.168.1.152"); memset(&cliaddr,0,sizeof(cliaddr)); cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(cliport); // cliport=13337 cliaddr.sin_addr.s_addr = inet_addr("192.168.1.110");
-
连接,绑定:
if (connect(serv, (struct sockaddr *) &servaddr, serv_length) < 0) { bail("Unable to connect with the server!"); } if(bind(cli, (struct sockaddr *)&cliaddr, cli_length)<0) { bail("Unable to bind to adr & port!"); }
-
创建TFTP请求:
memset( &cBuf1, 0, sizeof cBuf1); rdwrFrame = (struct tftp_wr_rq *)&cBuf1; rdwrFrame->opcode=htons(1); rdwrFrame->data={'t','e','s','t','.','t','x','t',' ','o','c','t','e','t',' '};
-
发送TFTP请求:
if (sendto (serv,cBuf1,19,0,(struct sockaddr *)&servaddr,serv_length) < 0) { bail ("Send the first requirment Frame error -- UDP"); }
我的问题是:
我做错了什么,TFTP-Server接收到错误的端口?我觉得应该用cliaddr来设置。
谢谢你的帮助&问候Rico
答:
我的问题是,我将错误的套接字与错误的地址结构组合在一起
下面是我的工作代码:
-
创建套接字:
serv = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (serv < 0) { bail("Unable to create socket tx!"); } cli = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (cli < 0) { bail("Unable to create socket rx!"); }
-
设置客户端和服务器地址:
memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(servport); servaddr.sin_addr.s_addr = inet_addr("192.168.1.152"); memset(&cliaddr,0,sizeof(cliaddr)); cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(cliport); cliaddr.sin_addr.s_addr = inet_addr("192.168.1.110");
-
连接,绑定:
if(bind(cli, (struct sockaddr *)&cliaddr, cli_length)<0) { bail("Unable to bind to adr & port!"); } if (connect(serv, (struct sockaddr *) &servaddr, serv_length) < 0) { bail("Unable to connect with the server!"); }
-
创建TFTP-Request:
memset( &cBuf1, 0, sizeof cBuf1); rdwrFrame = (struct tftp_wr_rq *)&cBuf1; rdwrFrame->opcode=htons(1); rdwrFrame->data={'t','e','s','t','.','t','x','t',(char)0,'o','c','t','e','t',(char)0};
-
发送TFTP-Request:
if (sendto (cli,cBuf1,19,0,(struct sockaddr *)&servaddr,serv_length) < 0) { bail ("Send the first requirment Frame error -- UDP"); }
-
接收数据:
recvfrom(cli,cBuf2,19,0,(struct sockaddr *)&cliaddr,(socklen_t*)&cli_length);
我单独添加了答案,所以没有人需要在原始帖子中搜索它。
答:
我的问题是,我将错误的套接字与错误的地址结构组合在一起
下面是我的工作代码:
-
创建套接字:
serv = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (serv < 0) { bail("Unable to create socket tx!"); } cli = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (cli < 0) { bail("Unable to create socket rx!"); }
-
设置客户端和服务器地址:
memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(servport); servaddr.sin_addr.s_addr = inet_addr("192.168.1.152"); memset(&cliaddr,0,sizeof(cliaddr)); cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(cliport); cliaddr.sin_addr.s_addr = inet_addr("192.168.1.110");
-
连接,绑定:
if(bind(cli, (struct sockaddr *)&cliaddr, cli_length)<0) { bail("Unable to bind to adr & port!"); } if (connect(serv, (struct sockaddr *) &servaddr, serv_length) < 0) { bail("Unable to connect with the server!"); }
-
创建TFTP-Request:
memset( &cBuf1, 0, sizeof cBuf1); rdwrFrame = (struct tftp_wr_rq *)&cBuf1; rdwrFrame->opcode=htons(1); rdwrFrame->data={'t','e','s','t','.','t','x','t',(char)0,'o','c','t','e','t',(char)0};
-
发送TFTP-Request:
if (sendto (cli,cBuf1,19,0,(struct sockaddr *)&servaddr,serv_length) < 0) { bail ("Send the first requirment Frame error -- UDP"); }
-
接收数据:
recvfrom(cli,cBuf2,19,0,(struct sockaddr *)&cliaddr,(socklen_t*)&cli_length);
相关文章:
- 提升异常的错误信息
- 我可以复制构造一个带有错误信息的提升::异常吗?
- androidndk和eclipse给出了关于c++getline()函数的不同错误信息
- 如何从lex / yacc获取更多解析错误信息
- Lua+Luabind,"runtime error"后堆栈顶部没有错误信息
- 如何使用Boost获取SyntaxError、NameError等的Python错误信息
- 用户输入数字的错误信息/向量
- 如何在MSBuild中定制c++编译器错误信息
- 程序崩溃,没有错误信息
- 在正确嵌套错误信息时遇到麻烦
- 错误信息c++
- 改进了dll丢失错误信息
- 关于隐式删除虚析构函数的错误信息是什么?
- 如何在c++中解释以下错误信息
- 如何解释显示在控制台上的c++错误信息
- 在我用c++编写的程序中显示错误信息
- visual studio中错误信息后面的消息是什么意思?
- c++汽车仪表模拟器.我一直收到这些错误信息
- Xcode 3.2断点错误信息
- 分割错误(core dumps) c++代码编译时的错误信息