【问题标题】:C# socket - how to correctly handle line endingC# 套接字 - 如何正确处理行尾
【发布时间】:2022-01-25 20:28:18
【问题描述】:

我收到了一个第 3 方 exe,它在端口 1234 上侦听并期望编号,例如 5000 以换行符结尾并为其返回输出

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

或者我发送1它返回例如TRUE,当我再次发送1然后它返回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));
}   

【问题讨论】:

  • 好像是"\r\n\0",谢谢

标签: c# sockets tcp


【解决方案1】:

这有点像在黑暗中寻找;但您可以尝试附加 NULL 字符 \0

所以基本上:\n\0\r\n\0NULL 字符有时被(不)正确地用于确定字符串的结尾,尤其是在较旧的 C 类系统中。

您可以在此处阅读更多信息:https://en.m.wikipedia.org/wiki/Null_character

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-16
    • 2015-11-20
    • 2019-03-18
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多