如题,如果不能的话,有什么方法能用于在socket建立连接时传递参数,望赐教,谢谢!

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.usertoken.aspx应用程序可使用此属性来将应用程序状态对象与 SocketAsyncEventArgs 对象关联。此属性本质上是一种可供应用程序用来向应用程序的事件处理程序(例如,异步操作完成方法)传递状态的途径。 此属性可用于所有异步套接字 (xxxAsync) 方法。 
      

  2.   

    人家那个是专门用于传用户信息的,不要乱用人家的东西。如果你觉得SocketAsyncEventArgs不够用,完全可以自己创建一个class,从它继承,并设置你自己的属性。然后,在编程中 new 出来你自己的这个class实例,就可以为其设置自定义值了。在对应的事件处理方法的第二个参数的声明上,可以直接用你自定义的这个class,而不是SocketAsyncEventArgs。
      

  3.   

    要注意,我告诉你的方法,是强类型的,你自定义的每一个属性都有明确的含义,成文自明。所以不要使用UserToken,因为你也用它,别人也用它,它很快就成了破抹布了,而且会造成冲突。
      

  4.   

    UserToken本来就是用来传递用户信息的,所以任何信息都是可以加载的。不过我这里还不清楚你打算传递些什么参数。
      

  5.   

    其实UserToken可以用来承载一个委托或者包含一个委托的类,用于指定本次传输结束后下次需要执行的操作,这比起使用等待信号要安全的多,不会出现死锁的情况。
      

  6.   

    具体地说,以msdn上的例子来说:
    http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx你可以在Init()方法的这一行readWriteEventArg = new SocketAsyncEventArgs();
    改为new出自己的参数对象readWriteEventArg = new MySocketAsyncEventArgs();
    readWriteEventArg.SayWhat="我自己定义的";
    然后把void IO_Completed(object sender, SocketAsyncEventArgs e)
    改为void IO_Completed(object sender, MySocketAsyncEventArgs e)这就可以从参数e来获取传进来的SayWhat属性值了。你还可以定义属性用于传出值。
      

  7.   

    嗯,前面一行变量类型声明SocketAsyncEventArgs readWriteEventArg;
    也要改为MySocketAsyncEventArgs readWriteEventArg;
      

  8.   

    你那种方法和自定义一个类传给UserToken属性一样的啊。
      

  9.   

    谢谢以上朋友的赐教,有点不明
    作为客服端在向服务器连接的时候,如何传递自定义的东西,比如6楼所说的SayWhat,是在连接的时候,我的意思是Connect的时候,因为如果继承SocketAsyncEventArgs的话,在连接后客服端需要进行一次数据发送,到服务端要进行一次遍历才能定位Socket的用户信息,不知有什么比较好的方法,谢谢!
      

  10.   

    你在SayWhat类中可以定义一些属性,像name,id,之类可以标识身份的.然后在服务器上建立一个表,如果服务器接到一个客户端的连接请求,在连接成功后,就将SayWhat类中标识身份的属性存到表中,如果发现客户端断开连接了就将该客户的信息从表中删除.这样就可以根据客户端每次发来的信息到表中识别身份,作不同的回应.
      

  11.   


    请教高手,我自定义一个类,继承SocketAsyncEventArgs类,加了几个属性,可是运行后收不到任何信息,不知道怎么回事,请高手 指点迷津~