【发布时间】:2016-05-11 12:43:36
【问题描述】:
我正在开发一个简单的 TCP 服务器应用程序,它从流中接收数据并将其存储在一个列表中。
当每个连接以一条消息发送数据时,我已成功获取数据。我的问题似乎是在命令行使用 telnet 对其进行测试时。我将开始打字,程序将根据我的打字速度抓取一两个字符,然后不会再从该流中接收任何内容。我真的不知道为什么。如果我在 stream.DataAvailable 循环中放置一个 thread.sleep,那么它将获得更多字符,但又会停止。任何帮助表示赞赏。我的班级如下:
public class TCPServer
{
private TcpListener listener;
public List<string> messages;
public TCPServer(IPAddress ip, int port)
{
try
{
messages = new List<string>();
listener = new TcpListener(ip, port);
listener.Start();
listener.BeginAcceptTcpClient(ClientConnected, listener);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
private void ClientConnected(IAsyncResult ar)
{
TcpClient client;
try
{
client = listener.EndAcceptTcpClient(ar);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
return;
}
try
{
NetworkStream stream = client.GetStream();
string message = "";
while (!stream.DataAvailable)
{
}
while (stream.DataAvailable)
{
byte[] readBytes = new byte[65536];
stream.Read(readBytes, 0, readBytes.Length);
message += Encoding.ASCII.GetString(readBytes).TrimEnd('\0');
}
if (message != null)
{
messages.Add(message);
message = "";
}
listener.BeginAcceptTcpClient(ClientConnected, listener);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
public void Stop()
{
listener.Stop();
}
}
【问题讨论】:
标签: c# tcp .net-4.0 tcpclient networkstream