繁体   English   中英

从套接字读取直到客户端在 C# 中发送 EOL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM