大家来帮我解决一个socket截获A和B之间的转发通信
情况是这样的,
有个A是客户端程序,B是服务器程序,TCP连接,A程序能够在网络断开恢复的状态下,自动重新连接服务器,
A向B 随机的发送数据,服务器不发数据给客户端,
现在要在A和B之间做个程序 C ,用来截获客户端发送的数据,然后转发给服务器,因为A和B程序都不能修改源
代码,C 程序和A程序安装在同一台主机上,
===============================================================================================
其实我发的这个问题,主要是为了讨论怎样来实现,因为这个例子我在网上找了不少资料,也了解到了不少
socket方面的东西。
1.因为要考虑网络断开的情况下,再次重新连接,这个需要考虑socket,connect,Send函数的返回值,
2.利用函数的返回值,也不是很准确的能够确定网络状态,有时候网络连接正常,也有可能发送数据失败;
3.还要考虑同步的问题,因为收到的数据要立即转发到服务器,在不使用队列的情况下,在网络不正常的
情况下,而且还要重新建立连接,很容易会将收到的数据转发不出去,就会丢包的现象;
4.或是做个网络监测的线程,监测网络状态,网络断开,立即关闭发送和接收数据的线程,正常,就启动发送
和接收数据的线程,这样能够达到自动连接服务器的效果;
=================================================================================================
其实上面最科学的解决办法应该是通过socket,connect,send这些函数的返回值来判断,但是比较复杂,
在这里和大家讨论这个问题?????????????
[解决办法]
首先 A 程序和 B 程序 分别安装在2台脑上,
A 程序和 C 程序在同一台电脑上,但是 A 和 C 之间是不能通过共享内存的,
因为A 和 B 程序都不能修改源代码,
--------------------------------------------------
A 程序本来就有断网重连的功能,在 C 程序中,你只要把recv做成一个多线程,
可以接收n多个连接的线程;如果网络断开,recv返回值是 0; 然后就用这个
返回值判断网络正常与否;
对于 C 程序在断网的情况下如何去连接 C 程序,设置一个断网的标志,如果断网
每隔10秒钟考虑重新去连接 B 程序;在连接 B
程序之前,判断下 当前的socket 是否关闭掉了,没有关闭就关闭下,再连;
======================================================
以上方案是可以帮你实现这个功能
send的函数的返回值,好像需要设置keepopt那个参数