今天将书上的一个实例程序实现的时候,发现问题多多。首先是书上的代码本来就有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。
今天将书上的一个实例程序实现的时候,发现问题多多。首先是书上的代码本来就有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。
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。(自己外加一个条件,还要找出最大路的...
阅读全文
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1//程序清单6-1 回应服务器代码 2// 编译命令Compile:cl -o Server Server...
阅读全文
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// Module Name: Cbnbsvr.c//// Description:// This NetB...
阅读全文
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// Module Name: nbcommon.c//// Description:// This fil...
阅读全文