最近在用C#开发,遇到了一个Socket的使用问题:
我想设计一个接口:Interface,其中有个Send方法,然后派生出若干个类,分别为A, B, C, D等,其中Send方法是想客户端发送消息。
现在的问题是:我可以为Interface接口添加成员变量Sock,以使得Send方法可以通过这个Sock进行发送,但是我无法使得Interface.Sock这个Sock和外部有TcpListener.Accept方法获取的Socket保持一致。
以前用VC的时候,CSocket类体统了Attach方法可以通过一个Handle进行识别,但是.Net的Socket类虽然提供了Handle属性,但是没有提供相应的函数可以使用这个Handle。也许我将问题描述成下面的情况比较容易理解:
……
Socket socket = tcpListener.AcceptSocket();
A a = new A(socket);
B b = new B(socket);
C b = new C(socket);
D b = new D(socket);
……
现在的问题就是上面的4个构造函数传递进去的参数,能否保证对象里面的Sock成员和外面的那个socket保持一致,也就是当我调用Send方法的时候能否准确的将消息发送给客户端?
注:以前的MFC的做法是取得socket的Handle,然后传递给a, b, c, d的Sock成员。其实我也可以使用下面的方法来达到目的:
Class SendData
{
public:
Sock;
Send(A a);
Send(B b);
Send(C c);
Send(D d);
}
SendData SD(tcpListener.AcceptSocket());
但是这个方法好像不符合面向对象的原则,属于面向过程的方法。