C#TCP套接字通信器 - 处理客户端和服务器之间的特殊消息

时间:2015-02-13 14:59:39

标签: c# .net sockets windows-phone-8 tcp

我想了解套接字通信,所以我决定尝试编写WP 8.1文本通信器。它基于TCP套接字。我几乎设法完成它,但我正在寻找改进网络。

值得一提的是我在手机之间使用套接字服务器(控制台应用程序),以避免私有IP地址出现问题。它包含有关所有连接用户的信息并将消息转发给客户端(例如,用户A向用户B发送消息,因此首先消息发送到服务器,服务器将消息转发到目标地址)。

问题出现时,我意识到我需要从服务器向客户端发送特殊消息,反之亦然(例如,当两个客户端想要进行对话时,他们会向服务器发送请求,因此它知道转发消息的位置)。 / p>

这是来自服务器应用程序的连接侦听器方法

private void ConnectionListener()
    {
        IPEndPoint localDataEndPoint = new IPEndPoint(IPAddress.Parse(LocalIpAddress), 1234);
        IPEndPoint localMessageEndPoint = new IPEndPoint(IPAddress.Parse(LocalIpAddress), 4321);
        Socket dataConnectionListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        Socket messageConnectionListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            dataConnectionListener.Bind(localDataEndPoint);
            dataConnectionListener.Listen(100);
            messageConnectionListener.Bind(localMessageEndPoint);
            messageConnectionListener.Listen(100);

            while (true)
            {
                TcpSocket.clientDone.Reset();
                IAsyncResult tmp1 = dataConnectionListener.BeginAccept(ConnectionCallback, null);
                IAsyncResult tmp2 = messageConnectionListener.BeginAccept(ConnectionCallback, null);
                TcpSocket.clientDone.WaitOne();
                Socket dataSocket = dataConnectionListener.EndAccept(tmp1);
                Socket messageSocket = messageConnectionListener.EndAccept(tmp2);

                TcpSocket tmpTcpSocket = new TcpSocket(dataSocket, messageSocket);
                tmpTcpSocket.Start();
                connectedUsersSockets.Add(tmpTcpSocket);
                UpdateConnectedUserList();
            }
        }
        catch (Exception ex)
        {
            Log.E("Connection listener ran into an exception", ex);
        }
    }

正如您所看到的,我创建了两个TCP套接字,可以放在不同的端口上。 dataSocket代表普通邮件,messageSocket代表特殊邮件(抱歉名字混乱,我必须折射代码)。

在客户端,它的工作方式相同:有两个不同的套接字与服务器进行通信。

我想避免管理两个套接字而不是一个套接字。但我能想象的唯一方法是,每个收到的消息服务器都必须检查它是否特殊(并以特殊方式处理)或者只是发送给客户端。

问题:有没有更好的方法来管理这些特殊消息?

提前感谢所有人!

P.S。 抱歉我的英语不好,不是我的母语

0 个答案:

没有答案