我有大约5000个调制解调器(瘦客户端),我想与他们沟通,我的方法之一是这样的:string GetModemData(modemID)
,现在我有一个开放的服务器端口监听调制解调器,我使用套接字编程发送数据到调制解调器(调用相关功能),但是当我想要在同一时间内向多个调制解调器发送数据并获得响应时,我不知道该怎么办?我可以发送数据到一个调制解调器并等待它的响应,然后发送另一个数据到其他调制解调器(顺序),但问题是客户端应该等待很长时间才能得到答案(可能是某些不同的客户端想从调制解调器获取某些信息所以他们都会等待Q或类似的东西),我认为解决这个问题的一种方法是使用多个端口,并监听每个调制解调器到相关的端口,但它占用太多的端口,也可能是内存使用量超出我的可用内存空间,所以可能会发生一些丢失(这是真的吗?)。该怎么办?我会考虑Parallelism,但我认为它不相关,我应该等待一个端口,因为我不知道应该将当前接收的数据传递给哪个客户端。我正在使用asp.net。如何使用多个端口或其他方式连接到具有tcp客户端的调制解调器?
目前我在做这样的:
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吗? – 2010-10-27 18:51:08
现在你应该做的是保持列表中的调制解调器对象的引用,但你仍然有识别调制解调器的问题,调制解调器应用程序是你的,我的意思是你写了那个应用程序?如果你这么做,那么你应该让调制解调器在连接到服务器时向你发送一个标识。 – 2010-10-27 19:11:58
@A_Nablsi,Modem是我的班级,我可以跟踪他们,但在客户端我有一个问题(不是瘦客户端,调制解调器是瘦客户端)我找到了一个解决方案,但它的复杂,因为我会做太多的解析算法,我想找一个简单的方法,现在我要去睡觉了:D – 2010-10-27 19:53:39