我的本意是想做一个类似QQ那样的IM软件(当然是简单得多,用户也不多的那种),不管你是用外网IP还是在局域网中通过代理服务器上网,只要你能上网用户之间就可以象QQ上一样随意聊天,可是我发现Socket好象只能用在局域网中,我把附近书店的书都翻遍了也未找到Socket在internet上如何运用,难道套接字不能用在这里?那有没有别的方法?
困扰已久,所以结帖材大难可能会晚些。垦请各位vc高手发表高见啊!
可能问得太笼统了,大家给个解决问题的思路或方向也很感激,谢谢了!!

解决方案 »

  1.   

    socket当然可以在internet上用啊,和局域网中的用法一样,不就是一个IP地址和一个端口嘛。
    不过要做到像QQ那样无论外网内网都可以连上的,你还要去了解一个NAT
      

  2.   

    只要是TCP/UDP/IP两台电脑在世界任何地方都行。
      

  3.   

    主要是IP地址问题。如果你的两台机器在Internet上都有合法IP,不是内网IP就没有问题。如果两台计算机一台有合法IP,一台是内网IP,则用内网IP计算机去主动连接另一台机器也可以。如果两台计算机都只有内网IP,则是不能直接用TCP/IP通信,因为找不到对方。
      

  4.   

    这不是Socket的问题,而是IP地址问题,如果你有2个合法的公网IP地址,它们可以直接通讯,就像局域网一样。
    如果要像QQ一样,还要解决NAT,防火墙等问题。
      

  5.   

    在做IM类软件,要解决NAT/Firewall的问题,实现防火墙穿透。
      

  6.   

    异常处理Content List: 
    Why Exception Handling when coding
    SEH Vs C++ Exception
    Exception Handling Modal in Visual C++
    Referencehttp://davidripple.blogchina.com/2337528.html
      

  7.   

    刚才按错了,不好意思。
    是呀,SOCKET在INTERNET上的应用必须要解决nat/firewall的问题,否则被拦截就无法实现通信了。
      

  8.   

    网上邻居中两个连接,一个是内网的,有固定的IP,另一个是连外网的。可我所Create出来的Socket都是来自内网的IP,如何让它跟外网的IP相Bind呢?
      

  9.   

    对于internet来说,内网的IP是没有任何作用的,内网和外网相连其实不难,内网主动连接外网就是了,因为有外网IP地址所以没有问题。
      

  10.   

    我的程序是基于UDP协议的,用SendTo(LPCTSTR(m_strData), iLen,1001, IP)从内网向外网发送信息的时候(其中IP为外网的动态IP)失败,外网用户无法收到来自内网的信息。
    至于双方都是外网的情况我还没试。
    请各位高手发表高见啊!!
      

  11.   

    socket 能做的多了 不仅是TCP/IP 如果喜欢IPX也可以用TCP/IP,还可以点对点,组播,广播internet的叶结点一点都只能点对点.要传透局域网你需要了解NAT,socks /http proxy等,当然简单的实现就是你在公网上有一台服务器.其它人就不管在什么网络,只要能访问公网就可以连服务器,这就是典型的C/S模式
      

  12.   

    To:  nooning(nooning) 
    我的想法和你一样,QQ采用的方案应该就是这种典型的C/S模式。
    我测试用的方法(A机有外网IP,相当于服务器,B机为内网机器,相当于一个客户),可现在问题是用SendTo(LPCTSTR(m_strData), iLen,1001, IP)的方法服务器无法收到来自客户的信息。不解是何故!
    请大家指点一下!
    另,本贴是小弟在CSDN上的第一个问题贴,经验不足,给的分太少了(瀑布汗......),请高手们不吝赐教呀,小弟先谢了!!
      

  13.   

    程序大致如下(省去了检查和出错处理等相关程序段):
             CSocketUDP m_uSocket;                     //CSocketUDP为CSocket的派生类
             int iLen;
             int iSend;
             CString m_strData;
             m_strData="This is a test string.";
             m_uSocket.Create(1001, SOCK_DGRAM);
    m_uSocket.Bind(1001);
             iLen = m_strData.GetLength();
             //下面的IP"218.85.104.162"为我当时的外网IP
    iSend = m_uSocket.SendTo(LPCTSTR(m_strData), iLen, 1001, "218.85.104.162"); 
      

  14.   

    无论局域网外网
    享用SOCKET通讯必须通讯两端都有一个有效地地址,你说无法在internet上使用
    多半是因为没有一个有效的地址造成的
      

  15.   

    To:  df8327(DF) 
    小弟初学网络编程不久,在cmd下用ipconfig/all命令显示如下内容是否说明我有外网的有效地址?请多多指教!
    --------------------------------------------------------------------------------------
    D:\Documents and Settings\www>ipconfig/allWindows IP Configuration        Host Name . . . . . . . . . . . . : ice
            Primary Dns Suffix  . . . . . . . :
            Node Type . . . . . . . . . . . . : Unknown
            IP Routing Enabled. . . . . . . . : No
            WINS Proxy Enabled. . . . . . . . : NoEthernet adapter 本地连接:        Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : National Semiconductor DP83815-Based
     PCI Fast Ethernet Adapter
            Physical Address. . . . . . . . . : 00-50-8D-62-4A-5B
            Dhcp Enabled. . . . . . . . . . . : No
            IP Address. . . . . . . . . . . . : 218.193.10.252
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . : 218.193.10.1
            DNS Servers . . . . . . . . . . . : 210.34.0.14
                                                210.34.0.18PPP adapter 宽带连接:        Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
            Physical Address. . . . . . . . . : 00-53-45-00-00-00
            Dhcp Enabled. . . . . . . . . . . : No
            IP Address. . . . . . . . . . . . : 218.85.105.129
            Subnet Mask . . . . . . . . . . . : 255.255.255.255
            Default Gateway . . . . . . . . . : 218.85.105.129
            DNS Servers . . . . . . . . . . . : 202.101.103.54
                                                202.101.103.55
            NetBIOS over Tcpip. . . . . . . . : DisabledD:\Documents and Settings\www> 
    -----------------------------------------------------------------------------------------
    另外,如果Socket用在internet上的条件真是要通信双方都得有外网IP的话,那Socket在internet方面不就是“鸡肋”一块了吗?
      

  16.   

    这和socket没关系,因为socket是基于网络体系结构中应用层的
    而你连接外网通讯,就牵涉到传输层甚至网络层的问题了,也就是了楼上几位说的NAT/防火墙问题了。
    不用急,慢慢来。
    ps:分一开始给的少,后来也可以加的:)
      

  17.   

    如果只要求至少一方有外网IP,另一方可以是内网用户的话起码我能建立一个C/S模型,那样内网用户之间通信时我可以通过中间的服务器端来转发实现。可是要双方都得有外网IP的话......
      

  18.   

    我靠,tctp/ip 能吗?问傻话,当然可以
    socket通讯当然是依附于协议,只要有协议可以保证,socket当然可以实现~~~
      

  19.   

    谢谢各位的指点!
    看来问题不在Socket,而是基本的协议、NAT和防火墙等等。路漫漫其修远兮,吾将上下而求索......
    结贴了,第一次发贴,给的分太少了,请大家别笑我小气,呵呵