我的程序有客户端和服务器端,每端都有两个winsock控件
一个udpwsk为UDP协议,一个tcpwsk为TCP协议,程序运行时先连好udpwsk,然后由服务器端的udpwsk向客户端的udpwsk发送指令,在客户端的udpwsk的DataArrival事件下,触发客户端的tcpwsk去连接服务器端的udpwsk。在内网中一切正常!可在internet网中却连不上tcp!!(具体如下:)客户端                                       服务器端udpwsk         --连接成功-->                 udpwskudpwsk         <--建立tcp连接的指令----      udpwsktcpwsk         ---tcp连接---->(失败)               tcpwsk
我在内网中,通过路由器共享上网,我已经进行了端口映射。
没有固定IP,我的tcowsk.RemoteHost用的是从“花生壳”申请的动态域名。请各位帮我看看是那里错拉?

解决方案 »

  1.   

    看看客户端的tcpwsk连接的地址和端口是多少,然后用telnet命令看看系统本身是否能联到这个地址
    (telnet ip port),如果连接不上,有可能是防火墙屏蔽了这个端口,或者连接到的地址不对(根据udp数据确定源地址有可能出错吧)。
      

  2.   

    IP或端口搞错了,或影射没成功!
    以上都不是的话,TCP连接代码有问题,注意:TCP要接受连接的
      

  3.   

    是你的NAT有问题。
    那要看你的NAT是Symmetric NAT 还是Cone NAT 了,Cone NAT的端口隐射后是固定的。Symmetric NAT 的端口是顺序分配的。你先进行UDP连接,这个端口被占用,再进行TCP连接肯定就连不上了。
      

  4.   

    应该不是防火墙的问题,连接都是由内向外,而且UDP连接是正常的。还有试试用UDP连接结束后释放端口。
      

  5.   

    谢谢大家的讨论~
    根据大家说的我在把情况说清楚点,
    1)防火墙已经关闭
    2)tcp和udp用的不是同一个端口
    3)端口映射时我是把所要的端口号,直接映射在我的内网IP上的.我不知道是不是在
    udpwsk.DataArrival事件下,触发连接,而发生了错误.还是TCP连接所需的时间太长,(不过我等了大概3分钟还是不能连上!)还请大家在帮我看看~十分感谢~
      

  6.   

    触发dataarrival后,TCP开始连接时,负责TCP的winsock的state属性怎样?error事件有发生吗?
    照你现在的情况也很难说...先试试就单个TCP连接实验吧.免得搞在一起,弄糊了~呵呵!
      

  7.   

    2)tcp和udp用的不是同一个端口---------
    我说一点,我说的这个端口是指本地端口.内网机器通过NAT上网过程是这样的.比如内网机器的地址为168.192.0.1:1234 ,NAT地址为 202.197.11.15 ,服务器地址为202.144.12.3:4321当有个数据包通过NAT后,NAT会分配给本机一个端口比如40000,这个就是所谓的映射端口.这时本机发送一个包到网路上,这个包的源地址会变成202.197.11.15:40000,目的地址是202.144.12.3:4321.如果是Cone NAT 本机所有的连接都会指向40000端口,而Symmetric NAT 就有可能是40001 .....服务器端通信的时候连接地址该是202.197.11.15:40000 不是168.192.0.1:1234.你该先试试单个TCP连接实验.也可能是你代码的问题.
      

  8.   

    jlum99(闲人)  老哥的意思是不是说,虽然我通过路由器把我的程序要用的端口,比如1234映射到我的计算机上,但实际上计算机开放的端口不是1234,而是别的端口?
    如果是这样的话,我该如何确认映射是否成功呢?并该如何解决呢?如果只做tcp连接的话,是正确的!还请老哥和大家帮我在看看~
    谢谢~
      

  9.   

    你的代理软件用的是什么??有可能是设置上的问题。或者你试试这样,使用UDP连接成功后,释放UDP端口。等待,然后尝试TCP连接。
      

  10.   

    端口映射的软件我没有
    没法测试
    以前也没用过,所以没办法说出解决方案
    能不能给一点资料或者软件下载地址我
    我回去测试一下
    [email protected]
      

  11.   

    试过,仅TCP没问题了吗?即,影射成功了吗?
    如果是我,想测试是否端口影射成功的话,我会把那个端口作为BT的监听端口,然后跑去下载!若有远程发起的连接就证明成功了!讲多无谓...证明影射成功,但问题还没解决的话,贴出代码!
      

  12.   

    一个udpwsk为UDP协议,一个tcpwsk为TCP协议,程序运行时先连好udpwsk,然后由服务器端的udpwsk向客户端的udpwsk发送指令,在客户端的udpwsk的DataArrival事件下,触发客户端的tcpwsk去连接服务器端的udpwsk。在内网中一切正常!可在internet网中却连不上tcp!!
      

  13.   

    UDP能连上,那就不是IP地址的问题了,不是什么没映射成功的问题了.
    TCP连接不能连接,你可以设置短点来一步步检查,是不是哪里使用了on error resume next,所以看不多报错了了.看一下连接不成功时winsock的状态是什么.