怎么用C++绑定程序的udp socket接受端口

我有两个应用程序在本机运行.他们之间的通信是通过UDP socket来实现的,同时两个程序又使用与外网的机器建立TCP连接.现在如果外网的IP跟程序A连接之后针对socket执行了一次强行关闭之后.我的程序A就会关闭所有UDP端口然后重新打开,程序B就收到了远程连接被重置,无法创建UDP端口的错误..连续几次的话程序B突然就不再创建UDP端口与程序A通信了,非要把程序B进程关掉了从开才能解决问题.求C++解决方案及源码
20分奉上,,不够还有软妹币.QQ65478162 邮箱65478162@qq.com

那个啥,程序B的UDP那边因为A关闭了端口所以发给A的数据包都被A丢弃,所以B那边再调用recvfrom函数就直接接收到A那边给的错误信息而返回-1了是吗。
其实这个时候不用重新创建socket绑定端口也没关系的,因为UDP本来就是无连接的。它和TCP不同,它可以针对每次发送都指定不同的目标地址的,也不管你数据有没有发到。
一个UDP端口只能被一个进程绑定一次,你的程序A关闭UDP端口并重新打开,B那边如果也要重新打开端口的话也要先关闭原来的端口(就是关了套接字)才能再打开。

总觉得说得好乱……这样,你先试试看在A对外网的TCP连接被强行关闭之后,如果没有必要那么就不对UDP进行关闭和重新打开操作,只对和外网通信的TCP socket进行重新创建和连接。如果A关闭并重开UDP端口是作为给B的一种信号的话,可以通过某种自定义的UDP数据包传输这种信号(若不方便复用已有的UDP socket,那么可以使用其他的进程间通讯手段,比如命名事件(Event内核对象))。追问

我也想试.问题是这两 程序我没有源码,.也不知道怎么写拦截函数..所以想找找有没有现成的东西,其实只要让我的程序B在收到被重置的时候重新关闭然后再 打开端口就行了..不知道程序B是怎么回事..查看B的日志发现前两次它会自动关闭然后重新创建原来的端口,第三次被重置的时候它就傻掉了
麻烦你告诉我一下解决问题的整体思路吧

追答

没源码……呃,这比较麻烦。

没源码并且要第三次才会“傻掉”那估计原来程序的逻辑就有点问题了。
你要不要试试看自己写个转发代理,变成 A -> 代理 -> B 和 B -> 代理 -> A,这样你就可以选择把返回-1的那次给拦截下来。如果A和B都是把目的地址和端口写死在程序里的,那可能要借助OllyDBG进行逆向工程直接修改EXE,如果EXE还是通过比较复杂的什么框架写成的,那么就改为在程序A和B内下API Hook来拦截函数。这样需要的基础知识就非常多了,而且做起来也略麻烦……

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网