2011-12-02 100 views
0

我一直在嘗試學習如何使用Visual C#執行異步接收時遇到了一些麻煩。我有一個基於控制檯的服務器程序,它接收來自客戶端的數據,然後將其發回。我的問題是在客戶端。它必須每100毫秒發送一次數據到服務器,然後再接收它。C#異步接收

問題在於讓它回來,因爲我不能讓程序停止並等待數據。下面是它看起來像那麼遠,

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 16487); 
TcpClient client = new TcpClient(); 

bool blnOnOFF; 

private void SendServerData() 
{ 
    string strData = "TEST DATA"; 

    NetworkStream clientStream = client.GetStream(); 

    ASCIIEncoding encoder = new ASCIIEncoding(); 
    byte[] buffer = encoder.GetBytes(strData); 

    clientStream.Write(buffer, 0, buffer.Length); 
    clientStream.Flush(); 
} 

// Ticks Every 100ms 
private void tmrDataTransfer_Tick(object sender, EventArgs e) 
{ 
    SendServerData(); 
} 
private void btnStart(object sender, EventArgs e) 
{ 
    if (blnOnOFF == false) 
    { 
     tmrDataTransfer.Start(); 
     blnOnOFF = true; 
    } 
    else 
    { 
     tmrDataTransfer.Stop(); 
     blnOnOFF = false; 
    } 
} 

正如你所看到的,它現在正在發送「試驗數據」。如果還有另一種方式來接收比異步更簡單的數據,請讓我知道,同時我想知道如何爲未來的項目做到這一點。

感謝先進。

編輯:添加客戶端對不起,我忘了

+0

什麼是'客戶端'?你的代碼不完整。 – Amy

+0

TcpClient client = new TcpClient(); <---對不起,我遺漏了它 – Dusty

回答

1

好了,所以,你需要做的是當你的應用程序是等待傳入的數據,你需要使用的TcpListener class

嘗試this SO answer

的的TcpListener類偵聽傳入連接,當它發現一個,它會創建一個TcpClient的該做的事情。同時,聽衆已經回去尋找新的聯繫。幾乎只有這樣做,並將作品轉移到其他地方。

我認爲(70%肯定)它爲新連接創建的TcpClient將在與您的偵聽器所使用的端口不同的端口上運行。因此,您總是在同一端口上偵聽,而您的處理是在其他端口上的其他線程上完成的。

有意義嗎?如果需要,我可以詳細說明。

+0

是有道理的。謝謝,我想我現在可以搞清楚了。 – Dusty