【发布时间】:2010-10-27 18:06:14
【问题描述】:
我有大约 5000 个调制解调器(瘦客户端),我想与他们通信,我的方法之一是这样的:string GetModemData(modemID),现在我在服务器中有一个开放端口来监听调制解调器,我正在使用套接字编程向调制解调器发送数据(调用相关函数),但是当我想同时向多个调制解调器发送数据并得到它们的响应时,我不知道该怎么办?我可以将数据发送到一个调制解调器并等待它的响应,然后将另一个数据发送到其他调制解调器(顺序),但问题是客户端应该等待很长时间才能得到答案(可能是一些不同的客户端想要从调制解调器获取一些信息所以他们都将等待进入Q或类似的东西),我认为解决这个问题的一种方法是使用多个端口并监听每个调制解调器到相关端口,但它需要太多端口并且也可能是内存使用量超过我的可用内存空间,因此可能会发生一些丢失(这是真的吗?)。应该怎么做?我会考虑并行性,但我认为它不相关我应该等待一个端口,因为我不知道应该将当前接收到的数据传递给哪个客户端。我正在使用 asp.net。
目前我正在这样做:
private void StartListener()
{
ModemTcpListener = new TcpListener(ModemPort);
//ClientTcpListener = new TcpListener(ClientPort);
ModemTcpListener.Start();
ModemTcpListener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptModemCallback), ModemTcpListener);
}
作为回报
private void DoReadModemCallback(IAsyncResult ar)
{
try
{
bool bRet = ar.AsyncWaitHandle.WaitOne(420000);
Modem modem = ar.AsyncState as Modem;
if (!bRet || modem == null)
{
return;
}
}
catch{}
// now send data to which client?????? if i'm going to use async????
}
和:
private void DoAcceptModemCallback(IAsyncResult ar)
{
try
{
ModemTcpListener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptModemCallback), ModemTcpListener);
TcpClient tcpClient = ModemTcpListener.EndAcceptTcpClient(ar);
Modem modem= new Modem(tcpClient, "");
tcpClient.GetStream().BeginRead(modem.Buffer, 0, tcpClient.ReceiveBufferSize, new AsyncCallback(DoReadModemCallback), modem);
ModemTcpListener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptModemCallback), ModemTcpListener);
Log.Write("a Modem connect ...");
}
catch (Exception ex)
{
}
}
【问题讨论】:
-
你在 DoAcceptModemCallback 中做了什么?
-
现在你应该做的是在一个列表中保留对调制解调器对象的引用,但是你仍然有识别调制解调器的问题,调制解调器应用程序是你的我的意思是你写了那个应用程序?因为如果你这样做了,那么你应该让调制解调器在连接到服务器时向你发送一个标识。
-
@A_Nablsi,调制解调器是我的课,我可以跟踪它们,但在客户端我有一个问题(不是瘦客户端,调制解调器是瘦客户端)我找到了一个解决方案,但它很复杂,因为我会做解析算法太多,我想找个简单的方法,现在我也睡了:D
-
晚安,祝你好运
-
您应该为此创建一个 Windows 服务。不要使用 asp.net
标签: c# asp.net sockets parallel-processing