Socket client;
...
client.BeginSend(byteData, 0, byteData.Length, SocketFlags.None,
    new AsyncCallback(SendCallback), client);关于BeginSend的最后一个参数:提示,
   一个对象,它包含此请求的状态信息,可以是用户自定义对象那么,是不是指,我除了把byteData发送给对方外,还会把最后一个参数也传送给对方?
对方用BeginReceive时除了接收到byteData外,还会接收到BeginSend的最后一个参数.如果
client.BeginSend(byteData, 0, byteData.Length, SocketFlags.None,
    new AsyncCallback(SendCallback), client);
的最后一个参数不是socket,而是一个自定义的类对象,那么,在发送后,对方是否是同样的会收到,然后就可以进行强行转换,
为自定义的类对象接着把他解释(即可以直接用).新手一个,谢谢指点.

解决方案 »

  1.   

    这个state是给AsyncCallback用的不是给对方...不会发送给对方...你本地Socket相关的信息对方也用不着...
      

  2.   

    同意2楼,这个是当你多个Socket操作调用同一个AsyncCallback时用来标识你你的操作源的,在不同的Socket的操作里给它传入不同的参数,你就可以根据这个参数来确定是哪个操作调用了这个AsyncCallback。
      

  3.   

    最后一个参数是一个应用程序自定义参数,不是传给对方,而是传给回调函数的。楼主你想想啊,如果对方不是.net程序,怎么个类型转换法啊?呵呵。
    在回调函数中,可以通过IAsyncResult.AsyncState来获取这个传过来的值,一般都会在发送时把发送的Socket对象传过来,然后在回调中调用EndSend方法。
    具体的可以参考MSDN中异步套接字编程的示例。
      

  4.   

    明白了,谢谢各位.by the way,
    http://blog.csdn.net/zhiang75/archive/2004/08/16/75915.aspx#273727
    这里[c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(源代码) ]这里的[完成端口]的思想究竟体现在哪里?
    我怎么看来看去就是一个socket 异步通讯的例子.~
      

  5.   

    看来英文要用学好,在CodeProject上可以搜到很多IOCP for c# 的源码....~~
      

  6.   

    如:http://www.codeproject.com/KB/cs/managediocp.aspx?fid=177973&select=1476630#xx1476630xx