通过连接的插座

时间:2014-04-04 08:32:01

标签: c# silverlight sockets tcp

如果这个问题毫无意义,请提前抱歉,我对这一切都很陌生,但我很担心我想解决。

以下是我为处理音频/视频服务器连接而创建的类的一部分,我们的想法是将此连接对象传递给处理所有音频和视频功能的Call对象。

class Connection{

private socket connection_socket;

    public void Connect(string IP_Address)
    {
        connection_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();

        socketEventArg.Completed += onConnectCompleted;
        connection_socket.ConnectAsync(socketEventArg);
    }
}

下面是我如何将连接对象复制到其他类,它是AudioCall和VideoCall的构造函数的一部分,然后它又将它复制到Call类中的_connection变量。

public class AudioCall : Call
{
    public AudioCall(Connection connection)
    {
        _connection = connection;
    }

我担心的是,我真的希望有人能够理解它背后的逻辑是因为连接对象实际上是一个连接,我使用了ConnectASync并且它连接了当我复制此连接时它不会按预期工作。我应该将其作为参考进行复制,以便使用实际的连接对象,还是以它的方式工作?我不完全理解套接字是如何工作的,所以我现在不知道。

我希望有人可以提供帮助,并且非常感谢。

1 个答案:

答案 0 :(得分:1)

C#中的每个对象(不包括像int等的ValueTypes)都是通过引用传递的。因此,如果这个Connection对象适用于一个类,那么其他每个对象都可以正常工作。 让它失败的唯一方法是将其传递给具有不同网络属性的另一个节点(例如通过中间件)。