Socket sock=myTcpListener.AcceptSocket();
User user=(User)sock;这样是肯定不可以的,父类不能转换为子类,只有子类可以转换为父类!象你这种情况,你只能从一个 sock想办法去生成USER(根据sock的数据来生成一个新的USER,我估计很难)建议你这样
public class User
{
public Socket sock;
然后扩展你自己的方法
}
这样你就比较好转换了
User user=(User)sock;这样是肯定不可以的,父类不能转换为子类,只有子类可以转换为父类!象你这种情况,你只能从一个 sock想办法去生成USER(根据sock的数据来生成一个新的USER,我估计很难)建议你这样
public class User
{
public Socket sock;
然后扩展你自己的方法
}
这样你就比较好转换了
解决方案 »
- 高分求正则表达式
- C#怎样调用sql*plus,后台执行导出命令
- 如何获取添加时间最新的一个文件!
- WPF imageButton 怎么实现trigger,单击改变button里的image
- .NET中如何使用Autodesk公司的DWF Viewer控件打开dwg文件
- 求救:如何在C#中调用自己的dll
- 求助grid 急
- 求C#实现EXCEL的PercentRank函数的过程
- 大家是怎么规划自己的类库的?
- 在Microsoft Visual Studio.NEt 2003出现这样错误,项目不能进行调试怎么解决?
- 一个有点奇怪的问题
- 如何返回OleDbDataReader的第一条记录?,50分
user.sock =sock;
这和异步调用有什么关系?写出来看看好么?
如果能够继承Socket,那么每次取某个socket的消息的时候,
便很容易通过它的属性(如连接者的id等)知道它的身份,而且
可以直接调用它的方法。
cxx1997(小网虫_L) 你提到的方法是可以,但是不是最方便,
public class User
{
public Socket sock;
然后扩展你自己的方法
}
如果用这样的方式,当Socket.Select(),调用后得到一个socket的
数组,通过socket并不能知道每个连接的身份;而如果可以设法将
TcpListener得到的socket传给User,就可以通过Socket.Select()得
到一个User的数组,这样就简单多了。现在的问题是,继承socket虽然可以,但不知如何TcpListener得到
的socket传给User
User user = new User(socket)
private void asc(IAsyncResult ar)
{
User user=(User)ar.AsyncState;
//...
}
可以直接调用它的方法。
public class User
{
public Socket sock;
然后扩展你自己的方法
}
这样做,你要用原来sock的方法,只需要user.sock.select(),也是一样的
到一个User的数组,而不是Socket数组。还有Socket.Select(socketlist,null,null,1000)
是一个静态方法。如果按照你的方式,虽然也可以用Socket.Select,但得到的只能是一组
socket,不能通过这些socket知道每个连接的身份。
socket.BeginAccept(new AsyncCallback(asc),user);
//这里用socket对象的BeginAccept方法,传递的却是user,是不行的。
private void asc(IAsyncResult ar)
{
User user=(User)ar.AsyncState;
//这得到的只是用于异步操作的一个对象,并非通过响应用户连接请求得到的,
已经建立了Socket连接的User对象。只有调用了EndAccept才能活动这个连接,
如下所示,但EndAccept方法返回的也是Socket对象,仍没得到User对象。
Socket sock=user.EndAccept(ar);
//...
}
你可以找一下你说的例子
{
public Socket sock;
public User[] Select()
{
先调用sock.select得到Socket数组,然后,再将这个数组转换为USER数组
}
}
还有Socket.Select(socketlist,null,null,1000)
是一个静态方法。如果按照你的方式,虽然也可以用Socket.Select,但得到的只能是一组
socket,不能通过这些socket知道每个连接的身份。
//////////////////////////////////////////////////////
这段话,我不是太理解,为什么通过USER。Socket.Select就不能得到这些连接的身份???
public string userid;
}
这样我在从一个user对象读内容的时候,就能通过它的user.userid知道它的属性了。
//////////////////////////////////////////////////////////////////////////
public User[] Select()
{
先调用sock.select得到Socket数组,然后,再将这个数组转换为USER数组
//sock对象是没有select方法的
}
//////////////////////////////////////////////////////////////////////////
这里是什么意思,不太明白?
而Socket.Select()方法,支持的是对socket数组或者继承自socket的对象的数组的操作。