编程实现:类似于代理服务器的功能、简单端口映射。
现要从外网传一个IP包到内网的一台机器,由于不能用内网的地址,所以在服务器上运行一个程序。
监测某一个固定端口,把所有从外网发往该端口的数据转发给内网另一固定地址的固定端口。反之亦然。
本人网络编程方面比较菜鸟,请高手指点迷津,有源程序最好,望不吝赐教。
问题点数:100、回复次数:8Top
1 楼ezway(高手的零头★★★★☆)回复于 2002-04-24 10:15:34 得分 0
诚心求教,Up有分。既然我不能成为名牌专家,就当个名牌“提问者”(送分人)。Top
2 楼cxiaobao(风子)回复于 2002-04-24 10:25:34 得分 0
我有。可以同时设定多条tcp断口映射通道。程序运行后没有窗口(要当后门嘛).打开udp508断口监听控制命令,通过远端的控制程序,你可以新建或删除断口映射通道,显示状态,关闭程序。
源代码cxiaobao@163.comTop
3 楼cxiaobao(风子)回复于 2002-04-24 10:31:09 得分 100
http://www.csdn.net/expert/topic/636/636645.xml?temp=.8629267Top
4 楼ezway(高手的零头★★★★☆)回复于 2002-04-24 10:42:09 得分 0
我的Email: yehuafei@163.net
请风子兄发过来好吗,希望拜读过兄的源程序后我能有所领悟。
其它大虾有高见的 或有源程序,
也望能借小弟一阅,以便我能早日完成任务。
我会根据对我帮助的大小给分,不够再加。
Again:诚心求教,Up有分 ---成为名牌送分人Top
5 楼ezway(高手的零头★★★★☆)回复于 2002-04-24 10:50:48 得分 0
刚刚去看了那个贴子,和我的问题比较类似,看来是个FAQ耶。
如果能圆满解决,我们可以把它上交到FAQ,大家都可以得分。Top
6 楼ezway(高手的零头★★★★☆)回复于 2002-04-24 11:03:16 得分 0
哇靠,风兄,你真的好快呀,
程序收到,待我慢慢看来。
当然,既然我要提交到FAQ,多少谈谈遍这个东东的原理拉思想拉什么的。
也好让其他菜鸟有点上手的起点嘛。
另外,你还差多少分到三级?Top
7 楼cxiaobao(风子)回复于 2002-04-24 16:59:48 得分 0
核心函数:
TCPDataC2T(LPVOID psock);
TCPDataT2C(LPVOID psock);
在运行时,此两函数分别产生一个线程,TCPDataC2T负责把客户端发送来的数据送到目标端,而TCPDataT2C则相反。
这两个函数分别使用64k缓冲区,对收到的数据进行缓冲。
ListenThread是监听线程,每一个端口映射通道都有一个ListenThread线程与之对应,当有连接请求时,listenthread产生一个ConnectThread线程,然后关闭线程句柄,继续等待下一次连接,而ConnectThread线程又产生TCPDataT2C和TCPDataC2T线程,并等待其结束。
ControlThread线程打开udp508端口,等待远端命令,并根据命令进行操作。
ParamSetting是控制命令的结构,具体见程序。
远端命令具体有:
1。新建一个端口映射通道,即意味着新开一个listenthread线程;
2。删除一个通道,关闭一个listenthread线程,但是程序中由于使用了阻塞方式调用accept(),并且关闭线程的方式是“温和”的由线程自身结束,而非使用terminalthread()在线程外部强行结束,所以在发出关闭命令后,该listenthread线程并不是马上关闭,而是下一次连接后关闭,具体可以看看代码,在ParamSetting结构中brun就是线程是否要结束的标志;删除一条通道对于当前正在使用该通道建立连接无影响。
3。查看当前通道状态,可以显示当前所有的通道,并能显示被连接的次数。
4。结束程序,可以通过远程命令让服务器程序关闭。与关闭一条通道不同,该命令将立即结束程序,并且关闭所有连接。
我不知道要多少分才到三机,我也不关心,我只想大家能互相交流,分多分少又有什么意义?Top
8 楼ezway(高手的零头★★★★☆)回复于 2002-04-25 10:10:35 得分 0
我对你的景仰有如自来水管绵绵不绝。
请问,怎么才能吧网络编程学到你那么出神入化呢?
比如看什么书、上什么网站、读哪的文章等等。Top




