C# socket - 如何正确处理行尾

C# socket - how to correctly handle line ending

我收到了一个第 3 方 exe,它在端口 1234 上侦听并期望数字,例如 5000 以换行符结尾并且 returns 输出

但出于某种原因,例如,当我只发送 0 时,它卡住了,当我重新启动我的监听器和这个 exe 时,我觉得我收到了之前的响应

或者我发送 1 它 returns 例如 TRUE 当我再次发送 1 然后它 returns FALSE, 所以它似乎不单独处理这些输入,好像没有意识到它是其他消息

我猜我的代码有问题,但我不知道,因为我没有这个第 3 方的代码。

我认为我处理的行结尾错误

using System.Net;   
using System.Text;
using System.Net.Sockets;


var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var remoteEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
socket.Connect(remoteEndPoint);

while (true)
{
    string s = Console.ReadLine();
    byte[] byData = Encoding.ASCII.GetBytes(s + "\r\n"); // I tried also \r \r \n \n \r\n
    socket.Send(byData);

    byte[] buffer = new byte[1024];

    int length = socket.Receive(buffer);
    char[] chars = new char[length];

    Encoding.UTF8.GetChars(buffer, 0, length, chars, 0);
    Console.WriteLine(new string(chars));
}   

这有点像在黑暗中寻找;但您可以尝试附加 NULL 字符 [=10=].

所以基本上:\n[=11=]\r\n[=12=]NULL 有时会(错误地)正确使用字符来确定字符串的结尾,尤其是在较旧的 C 类系统中。

您可以在这里阅读更多相关信息:https://en.m.wikipedia.org/wiki/Null_character