2011-12-02 72 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