我有大約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