解决方案 »

  1.   

    http://www.csharpwin.com/csharpspace/13263r8436.shtml
      

  2.   


    这篇文章我也看过,是每次BeginReceive的时候new 一个buffer。那样的话,FlyTcp的代码是不是有问题呢?
    怎样可以测试出他这种共用buffer的方法有问题呢?
      

  3.   

    buffer是缓冲区....http://www.cnblogs.com/chenxizhang/archive/2011/09/10/2172994.html建议LZ看下这个文章..能深入的理解socket异步的东西..另外 FlyTcp是什么?别人封装的DLL么? 我没有听过不过既然封装了 你应该看不到BeginReceive这样的代码.只能看到3个方法..连接发送断开
      

  4.   

    你好,文章我看了,你发的文章就是我说的FlyTcp的用法。FlyTcp 是网上别人发的轻巧的开源的Tcp库。     //这里的buffer是成员变量,每次Accept一个客户端的时候,都用这同一个buffer传到BeginReceive
         client.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,new AsyncCallback(ReceiveMessage),client);还有网上看到的另外一种     //这是每次都new 一个。 如果上面那种可以用的话,那下面这种每个都new 是不是有点多余了!?
         buffer = new byte[1024];
         client.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,new AsyncCallback(ReceiveMessage),client);
      

  5.   

    正常来说 一个全局的buffer就够了 下面的 我个人认为没什么必要..仅仅代表个人观点..
      

  6.   

    除非没有并发BeginReceive,必须一个客户端分配一个buffer,但不是每次BeginReceive一个buffer。
      

  7.   

    有的系统对并发要求不高,可以用串行的模式处理,但是要在程序逻辑上保证它是串行的,就可以只用一个buffer。
      

  8.   

    写出共享 buffer 的代码,可能是因为急于弄一个演示,缺少一定强度的“并发”测试的结果。先写个测试程序,创建客户端连接并且发送一定量(比如说100k大小)的消息,然后读取服务器返回值验证结果是否正确。然后,你的测试程序只要是并发(比如说20个线程)去循环执行测试程序(比如说每一个线程中都把测试用例执行10遍),瞬间就能发现并发错误。另外,应用程序的 buffer 的大小不等于底层windows网络驱动的缓冲池。底层是1000字节多一点大小(不到1024字节),不代表着应用层也应该这么大。应用程序中应该设置为差不多100万字节,才能保证通讯比较快。