哪位大侠知道怎么获取本机上网所用的IP地址和端口号?就是说我的机器在局域网中通过代理服务器上的网,怎么写程序才能从局域网外的Internet上给我的机器发消息或者是传数据?

解决方案 »

  1.   

    这个比较困难,因为你的机器是通过局域网的服务器接入internet的,一般地说,这样的服务器上提供NAT服务,也就是说,你的机器发出的数据中的IP包中的IP地址和端口号都没替换成服务器的IP地址和它动态给你分配的端口号,而TCP的连接是要经过三次握手协商的。在NAT中,外部访问内部的主动访问是禁止的,一是为了安全,二是因为IP地址数量有限,也就是说,从外部来的TCP的SYNC包在NAT会被丢弃,所以就不能访问内部的机器。
      

  2.   

    明白了,不过像realplayer和qq是怎么用的啊
      

  3.   

    qq用的是udp呀,比如你和朋友全部都在局域网用qq聊天,你的qq上记载的是你朋友的代理服务器的地址。你朋友的qq上同样记载的是你公司的代理服务器地址。
    你可以做一个测试呀:
    你在你公司的两台电脑上分别用一个QQ号聊天,再用天网防火墙之类的工具截获qq发出的包。你会发现这两个qq发送的是同一个地址,既是你公司代理的地址。
      

  4.   

    要获得上网IP可使用API:
    gethostname()
    gethostbyname()
    至于要访问非独立地址的计算机我觉得不太现实
      

  5.   

    TCP方式:
    在有独立的ip地址的机器上监听,(服务);
    没有独立ip地址的机器去连接服务,
    如果你目前的代理服务允许,只要连接成功,就可以传送数据。