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
我收到了一个第 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