日期:2014-05-17  浏览次数:20417 次

问个小问题,我发誓绝对简单
本帖最后由 hrabeyond 于 2010-09-15 09:23:49 编辑
关于从Socket获取数据的问题,

服务端:

private static void OnRecievedData(IAsyncResult ar)
{
    SocketCoderClient client = (SocketCoderClient)ar.AsyncState;

    IList<ArraySegment<byte>> list=new List<ArraySegment<byte>>();

    byte[] aryRet = client.GetRecievedData(ar);
    ArraySegment<byte> arrByte = new ArraySegment<byte>(aryRet);

    list.Add(arrByte);
   
    //.......省略N步

    //有一个客户端列表ClientsList,List<SocketCoderClient>类型
    //这里的目的是向每个客户端发送所有客户端的数据
    foreach(SocketCoderClient scc in ClientsList)
    {
        //判断等省略
        clientSend.ReadOnlySocket.Send(aryRet);
    }
}


这里的Send方法用的是如下重载:

        // 摘要:
        //     将列表中的一组缓冲区发送到连接的 System.Net.Sockets.Socket。
        //
        // 参数:
        //   buffers:
        //     System.Byte 类型的 System.ArraySegment<T> 的列表,它包含要发送的数据。
        //
        // 返回结果:
        //     已发送到 System.Net.Sockets.Socket 的字节数。
        //
        // 异常:
        //   System.ArgumentNullException:
        //     buffers 为 null。
        //
        //   System.ArgumentException:
        //     buffers 为空。
        //
        //   System.Net.Sockets.SocketException:
        //     试图访问套接字时发生错误。请参见下面的备注部分。
        //
        //   System.ObjectDisposedException:
        //     System.Net.Sockets.Socket 已关闭。
        public int Send(IList<ArraySegment<byte>> buffers);



客户端:

Socket client_socket;

byte[] response = new byte[150000];
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.Completed += OnReceiveCompleted;
socketEventArg.SetBuffer(response, 0, response.Length);&nbs