[英]Reading from socket until client sends EOL in C#
我有一个看起来像这样的基本套接字服务器:
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8000);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
newsock.Bind(localEndPoint);
}
catch (Exception e)
{
//Errors handled
}
newsock.Listen(10);
Console.WriteLine("Bound to port 8000");
Socket client = newsock.Accept();
while (client.Connected)
{
Console.WriteLine("Connection recieved.");
string outputString = null;
byte[] buffer = new byte[4];
client.Receive(buffer);
string bit = null;
while (bit != "\r\n" || bit != "\n" || bit != "\r")
{
bit = Encoding.ASCII.GetString(buffer);
outputString += bit;
}
Console.WriteLine(outputString);
}
现在我希望它接受输入,直到用户(当前是 telnet)发送 EOL(按回车键)上面的代码大部分是我迄今为止尝试过的,我应该怎么做?
好吧,TCP 在流中工作,所以为了检测任何东西,你必须预料到 \r\n 不是唯一在你的缓冲区中的情况。
代替
bit != "\r\n" || bit != "\n" || bit != "\r"
和
!bit.Contains("\r") && !bit.Contains("\n")
不要忘记用来自 TCPStream 的数据重新填充“位”......意思是
while (bit != "\r\n" || bit != "\n" || bit != "\r")
{
bit = Encoding.ASCII.GetString(buffer);
outputString += bit;
}
你需要
client.Receive(buffer);
所以它看起来像:
while (bit != "\r\n" || bit != "\n" || bit != "\r")
{
bit = Encoding.ASCII.GetString(buffer);
outputString += bit;
client.Receive(buffer);
}
而且...异常处理程序会在客户端断开连接时通知您。
发送 EOL 字符时,您可能会收到多个字符尝试:
while (bit != null && !bit.EndsWith("\r") && !bit.EndsWith("\n") )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.