socketAsync的UserToken是否能用于在连接时传递参数?

xiaxuan_xx 2010-03-16 04:12:51
如题,如果不能的话,有什么方法能用于在socket建立连接时传递参数,望赐教,谢谢!
...全文
348 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiniaon 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
具体地说,以msdn上的例子来说:
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx你可以在Init()方法的这一行C# code
readWriteEventArg = new SocketAsyncEventArgs();

改为new出自己的参数对象C# code
r……
[/Quote]

请教高手,我自定义一个类,继承SocketAsyncEventArgs类,加了几个属性,可是运行后收不到任何信息,不知道怎么回事,请高手 指点迷津~
xingyuebuyu 2010-03-16
  • 打赏
  • 举报
回复
你在SayWhat类中可以定义一些属性,像name,id,之类可以标识身份的.然后在服务器上建立一个表,如果服务器接到一个客户端的连接请求,在连接成功后,就将SayWhat类中标识身份的属性存到表中,如果发现客户端断开连接了就将该客户的信息从表中删除.这样就可以根据客户端每次发来的信息到表中识别身份,作不同的回应.
xiaxuan_xx 2010-03-16
  • 打赏
  • 举报
回复
谢谢以上朋友的赐教,有点不明
作为客服端在向服务器连接的时候,如何传递自定义的东西,比如6楼所说的SayWhat,是在连接的时候,我的意思是Connect的时候,因为如果继承SocketAsyncEventArgs的话,在连接后客服端需要进行一次数据发送,到服务端要进行一次遍历才能定位Socket的用户信息,不知有什么比较好的方法,谢谢!
xingyuebuyu 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]
嗯,前面一行变量类型声明

C# code
SocketAsyncEventArgs readWriteEventArg;

也要改为

C# code
MySocketAsyncEventArgs readWriteEventArg;
[/Quote]

这个思路是一样的。

不过包装起来对以后的项目方便扩展和修改。
qldsrx 2010-03-16
  • 打赏
  • 举报
回复
你那种方法和自定义一个类传给UserToken属性一样的啊。
  • 打赏
  • 举报
回复
嗯,前面一行变量类型声明
SocketAsyncEventArgs readWriteEventArg;
也要改为
MySocketAsyncEventArgs readWriteEventArg;
  • 打赏
  • 举报
回复
具体地说,以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属性值了。你还可以定义属性用于传出值。
qldsrx 2010-03-16
  • 打赏
  • 举报
回复
其实UserToken可以用来承载一个委托或者包含一个委托的类,用于指定本次传输结束后下次需要执行的操作,这比起使用等待信号要安全的多,不会出现死锁的情况。
qldsrx 2010-03-16
  • 打赏
  • 举报
回复
UserToken本来就是用来传递用户信息的,所以任何信息都是可以加载的。不过我这里还不清楚你打算传递些什么参数。
  • 打赏
  • 举报
回复
要注意,我告诉你的方法,是强类型的,你自定义的每一个属性都有明确的含义,成文自明。

所以不要使用UserToken,因为你也用它,别人也用它,它很快就成了破抹布了,而且会造成冲突。
  • 打赏
  • 举报
回复
人家那个是专门用于传用户信息的,不要乱用人家的东西。

如果你觉得SocketAsyncEventArgs不够用,完全可以自己创建一个class,从它继承,并设置你自己的属性。然后,在编程中 new 出来你自己的这个class实例,就可以为其设置自定义值了。

在对应的事件处理方法的第二个参数的声明上,可以直接用你自定义的这个class,而不是SocketAsyncEventArgs。
xingyuebuyu 2010-03-16
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.usertoken.aspx

应用程序可使用此属性来将应用程序状态对象与 SocketAsyncEventArgs 对象关联。此属性本质上是一种可供应用程序用来向应用程序的事件处理程序(例如,异步操作完成方法)传递状态的途径。

此属性可用于所有异步套接字 (xxxAsync) 方法。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧