我作过基于连接的,速度比较慢4k/s,
用udp好像比较快?

解决方案 »

  1.   

    那为大哥有UDP程序的原码或经验,可否教导小弟一番。
    [email protected]
      

  2.   

    我做过基于TCP的,好象传4M的文件不过用了十几秒(感觉比硬盘对拷还快)。
    (用的是MFC,使用CAsyncSocket类,用异步方式)
      

  3.   

    udp 不保证数据肯定能够到达目的地,也不保证数据肯定能够按发送的顺序达到,所以文件传输一般不用udp,而是用可靠的tcp 协议.
      

  4.   

    连接方法和tcp基本上一样,会tcp怎么不会udp?
      

  5.   

    接着
    UDP.h
    class CUdpComm  
    {
    public:
    UCHAR CRCTest(UCHAR* Buff,int From,int To);
    BOOL Send(BYTE* buf,int size,char* addr);
    CUdpComm(CWnd* pParent,
    UINT nSendPort=16888,
    UINT nRecvPort=16889);
    virtual ~CUdpComm();
    private:
    UINT m_nSendPort;
    UINT m_nRecvPort; CWnd* m_pParent; static UINT Thread(LPVOID pParam);
    BOOL m_bContinue;
    BOOL m_bExited;
    };
      

  6.   

    接着
    UDP.cppCUdpComm::CUdpComm(CWnd* pParent,UINT nSendPort,UINT nRecvPort)
    {
    m_nSendPort=nSendPort;
    m_nRecvPort=nRecvPort;
    m_pParent=pParent; WSADATA wsd;
    WSAStartup(0x0101,&wsd); m_bContinue=TRUE;
    m_bExited=TRUE;
    AfxBeginThread(Thread,(LPVOID)this);}CUdpComm::~CUdpComm()
    {
    // BYTE buf[11];
    m_bContinue=FALSE;
    /*
    while(m_bExited==FALSE)
    {
    Send(buf,11,"127.0.0.1");
    }
    */
    //Sleep(500);
    WSACleanup();
    }BOOL CUdpComm::Send(BYTE *buf, int size,char* addr)
    {
    CSocket sockSend;
    sockSend.Create(m_nSendPort,SOCK_DGRAM,NULL);
    sockSend.Bind(m_nSendPort,addr);
    int nCount;
    nCount=sockSend.SendTo(buf,
    size,m_nRecvPort,addr,0);
    sockSend.Close();
    return TRUE;
    }UINT CUdpComm::Thread(LPVOID pParam)
    {
    CUdpComm* pThis=(CUdpComm*)pParam;
    pThis->m_bExited=FALSE;
    CSocket sockReceive;
    BYTE buf[256];
    BYTE* PostBuf; UINT Port=pThis->m_nRecvPort; sockReceive.Create(Port,SOCK_DGRAM,NULL);
    sockReceive.Bind(Port,"127.0.0.1");

    CString strAddr("127.0.0.1");
    UINT nPort=pThis->m_nSendPort; int nCount;
    while(pThis->m_bContinue==TRUE)
    {
    Sleep(100);
    nCount=sockReceive.ReceiveFrom(buf,256,strAddr,nPort,0);
    PostBuf=new BYTE[nCount];
    memcpy(PostBuf,buf,nCount);
    pThis->m_pParent->PostMessage(IDM_SOCK_RECEIVE_DATA,
    (WPARAM)PostBuf,nCount);
    }
    sockReceive.Close();
    pThis->m_bExited=TRUE;
    return 0;
    }
    //每次校验2~buffersize-1字节内容,不校验55AA
    UCHAR CUdpComm::CRCTest(UCHAR* Buff,int From,int To)
    {
    UCHAR CrcTable[] = {
    0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
    0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
    0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
    0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
    0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
    0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
    0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
    0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
    0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
    0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
    0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
    0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
    0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
    0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
    0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
    0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
    0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
    0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
    0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
    0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
    0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
    0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
    0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
    0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
    0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
    0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
    0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
    0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
    0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
    0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
    0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
    0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3 
    };
    int i;
    UCHAR result = 0;
    for(i=From;i<To;i++)
    result = CrcTable[Buff[i] ^ result];
    return result^0xFF;
    }
      

  7.   

    刚刚做完udp的。测试了一下,只有40k/s,跟bbasd88(我很想说)和ExitWindows(void) 兄的差距太大。
      

  8.   

    兄弟们,给个源码吧,我实在混不下去了。
    [email protected]
      

  9.   

    达到83k/s了。跟bbasd88(我很想说)和ExitWindows(void)  兄的差距实在是
    太大。要源码的请举手
      

  10.   

    我做过的udp发送文件程序是600K.考虑了丢包和乱序情况。距离TCP差距不小,呵呵
      

  11.   

    TO neccui(PPC) (  ):
     能给个源码吗?[email protected]
    要多少分随便(共867分)
      

  12.   

    tcp 的快吧,UDP自己要考虑很多问题
      

  13.   

    TO neccui(PPC) (  )兄:
       花钱可以吗?你开个价钱吧
    急用!
      

  14.   

    TO neccui(PPC) (  ):
     要多少钱?我急用
    any way, thanks!
      

  15.   

    可以给我一份吗?
    [email protected]
      

  16.   

    [email protected]多谢啊,给我发一份原码。
      

  17.   

    udp是实时协议,应该比tcp快,呵呵
      

  18.   

    UDP并不见得比TCP快,而且有些系统对UDP支持有问题,效率比较低,比如WIN98。但是UDP有很多优点是TCP无法替代的, 简单, 可自主控制,延时小(体现在两个方面:UDP包头小, UDP可以自己重发,而TCP的第二次重发就已经时间相当长了)。对于传送文件这种操作,是应该使用tcp的,这时追求的是传输,而不是实时。
    而且由于实现的问题, UDP的传输效率怎么也高不过TCP了, 毕竟又多了一层。
      

  19.   

    给我一份吧,[email protected]
      

  20.   

    to  neccui(PPC):
       我觉得你的说法很有问题,你凭什么说在Win98对UDP的支持不好,我从来就没有听说过!
       另外对于传送文件的操作来讲,应该具体对待,如果需要传送的文件不大,完全可以使用基于UDP的tftp协议,保证实时和高效;如果传送的文件一般来讲比较大,当然使用tcp较好。
      

  21.   

    to neccui(PPC):
      UDP的传输效率怎么也高不过TCP了,毕竟又多了一层????????这是什么意思???????你不用过总听过吧,你觉得TCP/IP和UDP/IP这些很陌生吗?TCP和UDP都是IP所生的两兄弟(何来又多了一层?),不过TCP是慢才(慢但可靠),UDP是急才(快但不可靠).
      同意nuaaliao(深蓝色的海)所说,UDP我在Dos和Window98/2000都玩过不少,现在还在玩,但我并没有注意速度问题,因为在我的应用环境(局域网)里我认为已是足够快.
      

  22.   

    对于tcp, 传输的能力是由tcp层保证的,基本可以达到线速。
    对于udp,由于自己要做重发乱序等等操作,传输的能力是由客户来保证的。 也就是说客户完成了传输层的操作。客户是否能完成这个任务,就难说了。
    事实上tcp内部实现一定比自己写的更加完善高效。实际上,大家对于所谓的快,有理解上的不统一。快是两方面的,
    一个是延时小, 这个是udp的强项
    一个是带宽大,这个本来似乎也应该是udp的强项, 其实不尽然。TCP已经可达线速,UDP不可能比它再快,一旦考虑了重发问题,那可能反而不如TCP了。nuaaliao(深蓝色的海) ,你以说自己没有听说过为,这是一个好笑的理由。
    但是我由于工作需要, 对于win98, 2000和linux等系统也都做过测试。 在满流量的情况下, 各个系统表现不一,相比而言windows98的表现是很差的。至于tftp,呵呵, 现在有多少人在使用呢?
    对于文件传输而言,如果没有特殊的要求比如穿透防火墙、实时语音通讯之类
    ,tcp是最好的选择。尽量避免使用udp。logical(阿来),如果没有重发,TCP并不慢,它的延时和UDP是一样的,在良好的网络情况下,TCP的'慢'并不会有任何体现。至于传输效率,对于数据包大小的选择,何时发确认包,如何合并发送,以及各种特殊情况,TCP,系统会完成一切的。但是UDP则要自己完成,一个在以太网上效率很高的UDP程序,在ATM就可能会不适合。 总之,在能用TCP的地方最好使用TCP。
      

  23.   

    netbuie当然快了。
    基于局域网的嘛,
      

  24.   

    我觉得在局域网里用udp虽然理论上要考虑重发,但是相对于局域网的带宽,一般很少出现重发现象。我做的视频流传输就是用udp实现的。在局域网里很少出现丢包情况。
      

  25.   

    http://www.vchelp.net/source/casyncproxysocket_demo.zip
    用于建立与代理服务器之间连接的Socket类,支持SOCKS4/5 HTTP 1.1代理 
    http://www.vchelp.net/source/submit/socket_file.zip
    Winsock文件传输,支持文本文件和二进制文件
    别用UDP传文件!记得给分
      

  26.   

    就用Mulitcast(udp协议)开发的文件分发,这样很快的,你可以随意的控制带宽,最大速度未知(估计在百兆网上能达到50m以上),我为公司开发的,花了7个月,具有效验和纠错能力,保证能一次性的将数据文件接受完毕。
      

  27.   

    多谢啊,给我发一份原码。
    [email protected]
      

  28.   

    [email protected]
    thank a million!
      

  29.   

    [email protected]
    thanks a lot!
      

  30.   

    给我一份,谢谢了
    [email protected]
      

  31.   

    也给我一份,谢谢。[email protected]
      

  32.   

    你说的这种在基于非交换机基础上的局域网上的实现会有问题:
    例如10M的网40人共用,则每人的分得的带宽非常的低,假如又不是双工的话
    就会更低了。还有如果用UDP必须有一个包排序和包检测的过程,这样可能比用TCP的实现方式更加的慢,除非你的局域网的网络状况特别的好。
    如果你真的要一试的话,建议参考Radius以及RTP的实现。
      

  33.   

    我测试的比较多,如果在10M网上,最大传输率可以到8Mbits/s,即1MByte/s,
    而在100M网络上,只能传到40Mbits/s左右,如果你用UDP传输文件,一定要自己再在上层定义一套协议,才能做到可靠传输,用MultiCast(组播)传输,因为涉及到多人接收,不可能再定义一套协议来做到可靠传输.UDP与multicast都是边界保护的,所以接收端比较好处理.用TCP一定能做到可靠传输,但它对流边界不进行保护,如果在网络状况良好的情况下,用UDP,multicast,TCP效率都差不多,但在网络不好的情况下,TCP重传的概率很大,UDP与multicast出错概率也大.
      

  34.   

    jingqiu(金秋) 说得不错。 如果考虑流量的话,UDP和TCP的理论最大值并不会有多少差别。但是TCP的易用性(无需自己定义协议)不是UDP可以比拟的。另外, 你说的边界保护是指.....?我不能很肯定你的意思。
      

  35.   

    使用multicast发送文件有些不太现实,因为这样局限性很大,只能广播数据,多用于广播音视频数据,而其他的文件访问有很大的随机性。
      

  36.   

    tftp是用UDP实现的,在网上可以找到源码
      

  37.   

    我也感兴趣,以前做过UDP的,但效果不理想。
      

  38.   

    用NetBUIE速度是可以,我有这样的资料。
    我现在很关心一个技术:可以把Windows网络属性中的所有协议删除,
    仍然能实现局域网中数据的可靠传输。我曾见过别人做的程序。但一
    直没有能实现。我愿高分悬赏。
    顺便说:使用tcp,在有些场合和为难,比如说学校机房,很多是没有
    配置IP地址的。也未必上网。我想在这个局域网中传送无纸化考试的
    成绩,如何实现?或我想做电子教鞭类的程序,需要广播某台机器的
    所有屏幕内容,如何实现?
      

  39.   

    各位,有源码的话,千万记得给我一份!谢了!
    [email protected]
      

  40.   

    在公共机房的话,可以通过广播方式获得ip地址,然后再使用TCP进行点对点连接。
      

  41.   

    我有,不过是C++builder.
    需要请:[email protected]
      

  42.   

    我做过的
    UDP 〉8M字节/每秒 64M位/秒
    TCP 〉8M字节/秒 64M位/秒
    其实UDP/TCP差不多少
    intel pro100B 网卡
    1G K7处理器
    256M 内存
    C++Builder 5.0
      

  43.   

    俺有个UDP/IPX的程序,不过是封装了另外的协议。
      

  44.   

    to  shaohua(少华) 
       用Delphi,很容易实现的。
      

  45.   

    UDP建立一种不可靠的链接,对数据传输量大而要求又不很严格的场合可以考虑,如普通的图像传输。问题是这种情况下由于传输数据量较大很可能会引起数据丢失,解决的途径是用户自己编写协议(三次握手)以确保数据可靠传输,由此又产生新的问题:效率低下。还不如直接使用TCP。折衷的方案是将数据分割传输,一次传输一部分,即使数据丢失,引起的损失也不会很大。下面以Delphi中的TNMUDP作为工具传输一位图。哎,Delphi代码你要不要?
      

  46.   

    太简单了,发邮件给我
    [email protected]
      

  47.   

    delphi和VC做UDP传输我作过,但既要考虑数据的完整性(自己写代码解决罗),还得考虑速度,因此觉得不太理想。要么可能丢包,要么太慢。而
    tcp又要求公共机房的每台机器都得配置IP地址。可实际上,一般的公共机
    房都是先作好一个硬盘,在Ghost,因此指定固定IP地址不太现实。而且我
    也试过使用DHCP动态获取IP地址。可我的数据(比如成绩)传给谁?传到
    那台机器?而且我试过让一台机器的IP地址固定,其余采用动态获取IP,
    结果发现根本就不能连接socket(不知何故)。还有就是得考虑,如果别人没有安装你所用的协议,如何解决?因此,我倾向自己编个小协议,反正我只要传送数据量不大的数据。
      

  48.   

    有好心人给个源代码吧
    [email protected]
      

  49.   

    to lovelypengpeng(鹏鹏)
    源程序不是问题,这个很简单!
    但是面向对象开发需要的是能利用现有的资源,而不是自己开发!这个很重要。我不推荐用socket传输文件,因为这么做与面向对象的精神不符,与软件重用格格不入。我推荐的是用BCB自带的文件发送控件组。indy组和netmaster组都有提供。另外可选的还有Corba和DCOM。
    用Socket
    TCustomSocket发送用SendBuf可以一次发送2G字节,因此可以一次发送一个文件,接收一次一般只能接受8K字节,因此需要将收到的字节拼接起来。
    代码不复杂,我觉得不必贴出来。但是强烈建议不用Socket
      

  50.   

    to lovelypengpeng(鹏鹏
    你用VC?
      

  51.   

    唉,怎么用UDP做文件传输?
      

  52.   

    To redpower(常宁):
    是啊是啊
      

  53.   

    TO florist2000(善良的石头) :
    关于用VC开发UDP文件传输,很简单。外面到处都有这样的书。你随便找本书得啦。关键是做一个实用、可靠的
      

  54.   

    一般在局域网里面传文件,不用udp协议,因为它不可靠,一旦出错就完了,它只能用来传视频流。如果要传文件,最好用tcp协议。
      

  55.   

    to  shaohua(少华) (  )
    我没有说不可以
    只是你要做到可靠传输,花销的代价比TCP做的还要大
    又何苦呢,为什么不干脆用TCP?
    如果呢需要同时给很多人,那么可以用IGMP啊,为什么要用UDP?
      

  56.   

    to florist2000(善良的石头) :
    我没有用过IGMP,能指点一二吗?感激不尽!至于“只是你要做到可靠传输,花销的代价比TCP做的还要大”就未必了。
    因为我要传送的数据量不大,也不要总是建立连接在哪里。几十个字节
    一次,而且次数也不多。
      

  57.   

    Multicast 是我的首选,速度可快,带宽,效验,可靠性,竟在我的掌握之中,现在我又改进了,有时间我给你门一个动态库试试! 免费的!