【发布时间】:2021-11-19 06:27:12
【问题描述】:
我是套接字编程的新手。
我正在使用以下代码从病理机器接收传入数据。
byte[] buffer = new byte[2048];
IPAddress ipAddress = IPAddress.Parse(SERVER_IP);
IPEndPoint localEndpoint = new IPEndPoint(ipAddress, PORT_NO);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sock.Connect(localEndpoint);
}
catch (Exception ex)
{
throw ex;
}
int recv = 0;
string Printed = string.Empty;
StringBuilder sb = new StringBuilder();
while ((recv = sock.Receive(buffer)) > 0)
{
if (sock.Receive(buffer).ToString().Length > 1) // I used this line because it's receiving some garbage value all the time.
{
sb.Append(Encoding.UTF8.GetString(buffer));
}
else
{
if (sb.Length > 50 && Printed == string.Empty)
{
Console.WriteLine(sb);
Printed = "Y";
}
}
}
我面临的问题
- 我的程序没有收到完整的数据。也许是因为这条线
if (sock.Receive(buffer).ToString().Length > 1)。但我使用这条线是因为它总是收到一些东西。 - 我的程序进入无限循环。我正在寻找在接收到数据后应该停止一段时间并重新开始侦听新传入数据的程序。
【问题讨论】:
-
你创建了缓冲区,它的 Length 属性总是你给它的任何大小(2048)。
Receive()方法返回从套接字读取的字节数,因此请执行类似 var bytesRead = sock.Receive(buffer); 的操作。测试(字节读取);使用(缓冲区,字节读取);` -
@AlanK 我已经在这里完成了
while ((recv = sock.Receive(buffer)) > 0) -
你需要知道你所期望的框架格式。向您发送数据的机器必须具有构建数据的方式。您需要使用此框架来创建您的阅读要求。