我用的是VC6.0SP6环境
用VC新建一个Win32的空工程,我命名为test3,把jrtplib-3.7.0/examples目录下的example1.cpp复制到该工程的目录下.在工程中建一个文件夹header专门用来保存头文件.
把jrtplib-3.7.0/src目录中的头文件复制到header文件夹中.这时就可以在test3把example1.cpp和这些头文件加入到工程中去.(Add Files to Project..).
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
打开example1.cpp进行编译.发现错误e:/wu/c++/test3/example1.cpp(6) : fatal error C1083: Cannot open include file: 'rtpsession.h': No such file or directory Error executing cl.exe.
找不到头文件 rtpsession.h, 我们把example1.cpp源码改一下#include "rtpsession.h" 改成#include "header/rtpsession.h", header就是我们建的那个文件夹名.同样的,把其它头文件包含的都改过来.有引号的改,其它像#include <stdlib.h> 是系统目录的,不用改.
此时再次编译,又出了22个错误和5个警告.test3.exe - 22 error(s), 5 warning(s). 都是链接错误. 原因很简单了,因为我们还没把jrtplib.lib和jthread.lib引入到工程当中去,还有网络通信少不了的ws2_32.lib库,在源码的 头顶处加上 #pragma comment(lib,"jrtplib.lib")
#pragma comment(lib,"jthread.lib")
#pragma comment(lib,"ws2_32.lib")
也可以在Project -> setting -> Link 中把 jrtplib.lib jthread.lib ws2_32.lib 加进去,这样就不用在源码上改了
加进去后,再编译,发现还是错test3.exe - 14 error(s), 6 warning(s),又是链接错误,这时还得改一个地方,也是最后一个地方,Project -> setting -> C/C++ ,Category中选择Code Generation,然后在Userun-time library中选择Multithreaded DLL,因为我们用到了多线程的链接库,得修改这个地方. 修改完后终于可以编译成功了.当时真的很高兴 呵呵.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
怀着兴奋的心情运行第一个例子.
第一个提示 Enter local portbase: ,意思很明白,一个主机端口,我输入了8989,然后回车,第二个提示 Enter the destination IP address 输入目标IP地址,我输入了127.0.0.1本机嘛. 第三个提示 Enter the destionation port 目标端口,直接输入8888.然后回车再来个提示Number of packets you wish to be sent: 你想发送多少个包,我想发送10个就输入10吧,回车. 此时错误来了:ERROR: The specified port base is not an even number,主机端口错了...怎么回事.关了再来 输入9999 127.0.0.1 8888 10 问题还是一样.这就郁闷了,源码的问题吗,看了一个源码貌似都没有错.然后就去百度了.找了很久,终于找到一个答案:jrtplib只能用偶数的端口 号.... - -!汗. 重新试了一下,输入 6666 127.0.0.1 8888 10 ,终于可以发了,
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
但是还有一个问题,就是发的时候为什么收不到,源码中有接收的.这个问题百度了很久,都没有答案,最后自己发现的,原来把本地端口号和目标端口号一致就可以接收得到了.输入8888 127.0.0.1 8888 10,再测试,
Sending packet 1/10
Got packet !
Sending packet 2/10
Sending packet 3/10
Got packet !
Got packet !
Sending packet 4/10
Sending packet 5/10
Got packet !
Got packet !
Sending packet 6/10
Got packet !
Sending packet 7/10
Got packet !
Sending packet 8/10
Got packet !
Sending packet 9/10
Got packet !
Sending packet 10/10
Got packet !
Press any key to continue
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
是数据传输需要一定的时间吧,有时候发一次包并不能立即收到.第一个例子就这样顺利编译完成.
用了多长时间我也不知道,开始没有头绪,确实很郁闷,又没有人教,慢慢的百度,慢慢的探讨,错误总是接踵而来,但是事情总会有解决的办法的.呵呵.