我想了解套接字通信,所以我决定尝试编写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。 抱歉我的英语不好,不是我的母语