大家好,我正在尝试编写一个循环来读取后台线程中连接的套接字。但它只收到第一条消息。我搜索了一段时间来找到原因。但仍然无法弄清楚。我知道有些人遇到了同样的问题。但是,他们的原因似乎不同。我希望有人能帮助我。套接字只读第一次工作
private void setPort_Click(object sender, EventArgs e)
{
SetupTcpListener = new Task(() =>
{
try
{
Int32 Port;
Int32.TryParse(portNum.Text, out Port);
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, Port);
server.Start(10);
Tclient = server.AcceptTcpClient();
Console.WriteLine("Connected");
}
catch (SocketException exc)
{
Console.WriteLine("SocketException: {0}", exc);
}
NetworkStream tstream = Tclient.GetStream();
int t = 0;
while (true)//the first loop: WriteLine a signal when read sth
//read first message:"Get 0"
//read second message:"Get 1"
//and so on
{
t++;
int i = 0;
while (i <= 0)//the second loop is trying to read until get sth.
//when it get sth, the first while loop continue,and print a "Get t"
//t means how many times it has read a messsage.
{
i = tstream.Read(ReadBuffer,0,40);
}
Console.WriteLine("Get "+ t.ToString());
}
});
SetupTcpListener.Start();
}
您的读取语句返回读取的字节数。所以如果你成功地读了一些东西,我被设置为一个大于零的数字......而你的while循环是为i <= 0。 – andrew 2013-02-13 02:09:02
这就是我想要的,如果它Read()某事,它会打印一条消息,if不要,只是做一次(我<= 0)。但tstream.Read()只能在第一次正常工作。 – xyloid 2013-02-13 02:39:11
@xlyloid这是因为你只执行一次。再次阅读评论和答案。 – EJP 2013-02-13 02:47:35