使用QQ很久了,但是对于其中有一些咚咚很不明白。他是如何实现从一个客户(A)处传送文件给另外一个客户(B).
尤其是在Internet上的时候,更是如此。我对此理解了一下:
1.A通过某种方式直接找到了B,建立连接
2.A将文件自动转换为二进制流,直接通过连接,逐步逐步的传送到B对于第2点还好,最让我头痛的是第1点,
如何找到的?怎么实现的?我们使用Delphi是否可以实现?希望各位大虾出手相助

解决方案 »

  1.   

    我是菜鸟,一点点猜测:QQ有服务器的,首先联到服务器,然后服务器上再把每个QQ在线用户的IP地址传到客户端......
      

  2.   

    我们使用Delphi是否可以实现?记住在Windows下的东西用Delphi都可以实现!
      

  3.   

    QQ的客户端之间大多数时候是直接通讯的,除非你选中了那个“通过服务器转发”(印象中是这么写的)选项,或者是因为消息无法传递,所以从服务器转发。既然有对方的IP,那么建立一个连接传输文件也不是很困难的事情了。
      

  4.   

    应该是p2p的因为好多是局域网内的,有了IP又怎么样?必须穿透
      

  5.   

    P2P的方式啊。
    QQ登录后,Server会把所有在线好友的IP告诉你的。
    之后说的话,都是之间传输的,所以传文件,也是可以的。
      

  6.   

    感谢各位积极的回答,我也觉得,应该不仅仅是简单的IP的问题。因为存在一个IP穿透的问题,另外,为什么同一个机器可以开动多个IP,也同样可以毫不错误的进行传送信息和文件?我曾经听说,有一个什么东西可以唯一标示每一个应用程序,但是好像是保存在本地的。所以不通过。
    我也查阅了一些资料,据说有一个什么叫做Stocket的,也许可以,但是对于其中还是有太多的模糊。不知道我的想法是否正确,请各位继续支持和帮助,小生在此先谢过了。
      

  7.   

    在TCP/IP协议中,唯一标识一个应用进程的是socket;
    它通过网络层的IP地址和传输层的端口号来实现,对与同一个IP地址的内部网络,通过不同的端口号来标识不同的QQ进程;
    当你登陆QQ服务器的时候,服务器会保留你的保留IP地址和端口号信息,并在你的好友的QQ进程中进行列表显示,然后两个进程就可以通信了;至于P2P的文件传输,可以把文件转换成内存流的形式分段传输的,网上有好多例子,可以去找找;