private string OnReceivedData(IAsyncResult ar)
        {
            if (!ar.IsCompleted)
            {
                return null; // 这个也是新改的,原来没有返回null;
            }
            Socket s = (Socket)ar.AsyncState;
            try
            {
                int size = s.EndReceive(ar);
                //string ss = "";
                string sss = "";
                if (size > 0)
                {                    
                    for (int i = 0; i < size; i++)
                    {
                        sss += bufferReceive[i].ToString("x2");
                    }
                    return sss; // 这句是新改的,为了将收到的东西返回出去
                    //counterRosTimes++;
                    //ShowMsg(sss);
                }
                s.BeginReceive(bufferReceive, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceivedData), s);
 红色地方,提示错误, 返回值类型不匹配
上面是socket异步通信时的,接受函数, 开始时,上述代码都放在一个文件中
 也都能正常工作的
 现在我想把通信部分抽离出来,,单独封装到一个类文件中
 于是就出现了上面问题
 不知道如何修改呢?
 谢谢
                           }
            catch (SocketException E)
            {
            }

解决方案 »

  1.   

    AsyncCallback 这个委托没有返回值,OnReceivedData 方法也不能返回 string ,接收到的字节数据,方法内处理掉
      

  2.   

    public delegate void AsyncCallback (
    IAsyncResult ar
    )
    需要无返回类型的方法作为回调
      

  3.   

    方法内处理掉,这个可以理解 但是,我要把这个sss 字符串显示到界面上
     //ShowMsg(sss);
     这个句就是要将结果,显示到界面上去的
     比如txtBox内 ,,这个新的类文件里,没找到操作办法呀
     
     
      

  4.   

    这个新的类,通过构造函数或者公开的字段属性方法,在调用时将 TextBox 传进来保存为全局变量,在 OnReceivedData 方法内部给其赋值
      

  5.   

    这个新的类,通过构造函数或者公开的字段属性方法,在调用时将 TextBox 传进来保存为全局变量,在 OnReceivedData 方法内部给其赋值///说反了,,我是要将 OnReceivedData 内的数据 显示到界面上的txtbox上面去的
      

  6.   

    没说反,既然要赋值给 txtbox,又是新类,类中总要有 txtbox 的引用吧,不然赋给谁去
      

  7.   

    使用事件,public event EventHandler<DataReceivedArgs> DataReceived;
    protected virtual void OnDataReceived(string msg) {
      if(DataReceived != null) {
           DataReceived(this, new DataReceivedArgs(msg));
      }
    }
    class DataReceivedArgs : EventArgs {
       public string Msg{get; protected set;}   public DataReceivedArgs(string msg) {
           Msg = msg;
       }
    }外面挂载这个事件