回 帖 发 新 帖 刷新版面

主题:异步接收程序的问题!

public UserClient(TcpClient client)   //UserClient的构造函数
        {
            this._client = client;
            ns = _client.GetStream();
            ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),null );
        }
private void streamReceive(IAsyncResult ar)  //回调函数
        {
            int BytesRead;
            byte[] rcv;
            BytesRead =ns.EndRead (ar);
            if(BytesRead !=0)
            {
                rcv=new byte [BytesRead -1];
                for (int i = 0; i < BytesRead; i++)
                {
                    rcv[i] = buffer[i];
                }                        
                ns.BeginRead (buffer ,0,buffer.Length ,new AsyncCallback (streamReceive ),null );
            }
        }
这个程序有什么问题?为什么接收不了呢?

回复列表 (共2个回复)

沙发

唉,建议你找写线程方面的资料看一下.有BeginRead,你的EndRead在哪里?

板凳

ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),null );
改成:
ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(streamReceive),ns);
然后:
BytesRead =ns.EndRead (ar);
之前:
ns = (NetworkStream)ar.AsyncState;

 rcv=new byte [BytesRead -1];
                for (int i = 0; i < BytesRead; i++)
                {
                    rcv[i] = buffer[i];
                }            
这部分为什么不使用
rcv=new byte [BytesRead];
Array.Copy(buffer,0,rcv,0,BytesRead);
呢?
再试试看

我来回复

您尚未登录,请登录后再回复。点此登录或注册