在这里挖个错误合集帖

Posted on 2012-02-15 21:39 Seed-L 阅读(570) 评论(0)  编辑 收藏 引用 所属分类:
      今天将书上的一个实例程序实现的时候,发现问题多多。首先是书上的代码本来就有BUG,而且书上作者是抄袭中的渣渣,连抄袭也没有抄完全,再加上自己能力上的问题,在查错、发现问题、调试上花了很多时间。最令人蛋痛的是,有很多错误其实是已经错过很多次了,又或者根本不是什么技术性错误。为了更好地节省自己的时间,自己每犯一次错误就在这里记一次,总结一次,就算再忙也要。


这里的错误都将以小标题的格式分开,以关键字标识,按序号顺序排下来。例如:1。重定义 Winsock 







-------------------------------------分割线-------------------------------------------------

1.WSASocket未定义(Winsock头文件包含顺序、VC6)

     今天将书一个类似Ping的程序转换到VC6的时候,出现了很多问题。首先就是明明在包括了<winsock2.h>、链入了ws2_32.lib的情况还出现了WSASocket未定义的情况,而且会出现更多“重定义的错误”,在网上找了很久也没有找到解决方法。网上有很多人都有相似的问题,但是都是在自己解决了问题之后说了一句:“找到问题的所在了,谢谢所有楼上”就走了。。。。蛋痛。。。。。
     后来自己在之前写过的调用WSASocket中的程序中发现了有些不同,那就是<winsock2.h>的头文件总是放最前的,于是试一试,结果编译通过了。虽然不知道为什么,但是问题总是解决了.......

代码如下:
#include<winsock2.h> //the header must be first included
#include<WS2TCPIP.H>   //for IP_OPTIONS which equal to 1
#include<windows.h>
#include<stdio.h>
#include"CPing.h"

#pragma comment(lib,"ws2_32.lib")

     此外,正如注释所示,如果在代码中出现“IP_OPTIONS未定义”的时候,正是缺少了相应的头文件。因为书上的代码没有写是那个IP_OPTIONS是什么东东, 所以一直以为是宏定义的常量,以为作者忘记写了,其实是头文件里面的。WS2TCPIP.H貌似是一个扩展头文件。



2.WSASocket创建原始套接字失败(管理员权限、VC6)

这一个问题主要是出在我身上,明明书上有写,可是我看过之后完全没有印象,可能这就是我不喜欢看电子书的原因,收效很低。

代码:
m_hSocket = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0,WSA_FLAG_OVERLAPPED);
代码是没有问题的,传的参数也正确(AF_INET、SOCK_RAW、IPPROTO_ICMP),但是调用就是失败,返回的错误代码好像是10013,错误信息大概就是说“对套接字的访问没有权限”云云。。翻了下书,找到了答案,要这样调用,需要管理员权限运行VC6。




只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


posts - 5, comments - 1, trackbacks - 0, articles - 3

Copyright © Seed-L