怎么用C++绑定程序的udp socket接受端口
发布网友
发布时间:2022-05-22 15:57
我来回答
共1个回答
热心网友
时间:2024-03-08 22:43
那个啥,程序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来拦截函数。这样需要的基础知识就非常多了,而且做起来也略麻烦……