各位,我现在想做样这一件事情,有两个程序A,B他们侦听同一台机子的同一端口,可以重复绑定地址,但是只有其中一个程序可以收到数据,我现在想如果是A收到数据,能不能发到B侦听的端口呢?A会不会收到自己发送的数据呢?一般这样的两处程序有什么相互SHARE数据呢?

解决方案 »

  1.   

    有两个程序A,B他们侦听同一台机子的同一端口??
    =========================================
    我的理解是AB两个程序同时打开一个端口进行侦听。似乎不可能。
      

  2.   

    端口重用是什么意思?不是两个socket 可以绑定在一个端口
    而是在使用这个端口的socket close后
    没有TIME_WAIT的限制 马上就可以用
      

  3.   

    有两个程序A,B他们侦听同一台机子的同一端口?? --------------------------------------可以的,一个程序用socket,一个用winpcap库
      

  4.   

    A接收数据,然后发送给B,A、B和另外的程序收发数据协议格式要不一样,如果不符合协议格式就丢弃
      

  5.   

    一个用TCP,另一个用UDP,可以绑定同一端口,接收数据时指定MSG_PEEK标志,就不会把数据从缓冲区中移除。
      

  6.   

    在Windows平台和Linux平台下是有差别的。在Win平台下是哪一个进程先监听,则具有优先权,只有当该进程关闭监听,后续进程的监听才生效,并且优先的进程还可以再次监听来抢去accept。只是不影响后起进程已经建立的连接的通讯;Linux平台则是看谁抢到就算谁的。在Winsock2有一个WSADuplicateSocket,可以将已经Accept到的Socket交给子进程去处理通讯(需要相关的权限配置)。
      

  7.   

    像一些网络监视器,是如何做到的,其中监视器收到以后,其他程序照样可以收到,假如A,B侦听同一端口6666,A收到数据以后,再发送B程序,也是通过这一个端口6666,这样可不可以呢?A会不会收到自己发的数据呢?
      

  8.   

    又看了下问题,楼主是想端口复用吧,这要求绑定前未使用setsockopt指定SO_EXCLUSIVEADDRUSE独占,设置可复用参数。这样也是只有一个程序能接收数据,所以涉及到自定义协议的判断,不是自己的数据抱的时候,就涉及到端口转发
      

  9.   

    端口复用后,recv()的参数MSG_PEEK试试。Value Meaning 
    MSG_PEEK Peeks at the incoming data. The data is copied into the buffer but is not removed from the input queue. The function then returns the number of bytes currently pending to receive. 
      

  10.   

    工具是通过arp欺骗,把本该发给别人的数据发给了你,然后你再下发给别人