如题,服务器在公网,客户端通过路由器上网,在内网。
广播的时候服务器会尝试连接客户端,但因为通过路由连接不上。
有没有什么好的解决方法?另外,.net remoting使用的是长连接还是短连接?如果是长连接,TCP是支持双向通讯的,能不能用一条链路来收发信息?我分用光了,谁能解答等以后有分一定送上。
谢谢大家了

解决方案 »

  1.   

    广播连客户端?应该是客户端尝试连服务端厄这个不明白你什么意思。.net remoting 底层属于长连接。可以实现客户端回调。
    不过回调的时候有些特殊的讲究。http://www.cnblogs.com/wayfarer/articles/75213.html
      

  2.   

    如果是服务器连接客户端 那么使用P2P吧 哈哈,如果是客户端连接服务器 请使用 北风之神 SOCKET框架
      

  3.   

    是这样的,客户端向连接服务器,然后传给服务器一个MarshalByRefObject对象A(这个对象是在客户端实例化的),服务器端通过调用对象A来控制客户端。
    在局域测试的时候没问题,部署到公网之后就提示连接不到客户端端口,这才知道回调需要再用一条连接的,郁闷。
      

  4.   

    没有解决办法,我没有见过一个人用Remoting做出过一个公网通讯的实例,大部分文章都未经公网的实践。
    因为网上流行的remoting服务器事件都是双通道,而客户端在路由器未作端口转发的情况下,服务端不可能通过另一条通道调用客户端代理。
    你应该改用Wcf的net.tcp双向通信或者Socket,不要在未经公网实践的文章上浪费时间。
      

  5.   

    我提供一个变通的方法来实现remoting的公网“双向”通信,不要用事件,而是专门写一个服务端方法,该方法被客户端调用时阻塞,通过autoresetevent来阻塞,当有消息要通知客户端时,修改全局变量,释放信号量,将全局变量内的信息返回给客户端,客户端再次立即调用该方法在服务端形成阻塞,如此循环反复。
      

  6.   

    看起来好麻烦啊。性能怎么样?可以承载几千个客户端么?我也想用WCF,可是如果没有.net的机器,装个2.0还能接受,20多M,WCF那个,安装太…………
      

  7.   

    的确 remoting 是不适合在公网通信的。我建议用 webservice + 客户端轮询的方式。这样客户端就随便了.net 2.0也行另外,.net 3.0有简约版的。不是很大。
      

  8.   


    服务器开启一个udp监听,客户端也开启一个udp监听 然后使用此udp的Socket向服务器定时(20秒)发送一个数据包,(被成为NAT穿透技术 P2P软件用的就是这个.) 服务器的udp接收到客户端的udp之后 只作为客户端心跳包处理, 当有数据需要发送到客户端的时候 直接使用此udp向客户端的地址(客户端发udp包到服务器时服务器记录下来客户端地址)发送udp数据, 客户端udp就能接收到了.我现在在做的一个项目,是群聊对讲软件,一个人说大家听,说用tcp说, 服务器把收到的数据udp分发. 
      

  9.   

    简约版的.net 3.0?多大?不是2M那个吧,2M那个还自己上网下别的东西。找到一个Genuine Channels ,不过需要购买。Udp的稳定么?以前我用过UDP,好像不是所有网络环境都能好用
      

  10.   

    当然不是2M的,是把不用的dll去掉的。我也记不住了,好像有个40m。看你要做什么样的application。即时通讯的话还是socket
      

  11.   

    .net 3.5 精简版的 在vs自带的文件夹里.   .cab的文件是mobile或者ce设备使用的. msi的是windows下的.
      

  12.   

    我决定使用 Genuine Channels 了,谢谢大家了